如果省略了必需参数,是否可以强制抛出PowerShell脚本?

Jos*_*arl 34 powershell

我想在这个脚本中的第二个函数调用抛出一个错误:

function Deploy
{

param(

    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$BuildName

    )
    Write-Host "Build name is: $BuildName"

}

Deploy "Build123"

Deploy #Currently prompts for input
Run Code Online (Sandbox Code Playgroud)

提示非常适合以交互方式使用脚本,但这也将由我们的构建服务器执行.

我最好的选择是用某种if东西做一些自定义验证吗?

Sha*_*evy 49

一旦参数被标记为必需,PowerShell将提示输入值.也就是说,如果删除强制属性,则可以使用throw语句设置默认值:

function Deploy
{
    param(
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$BuildName=$(throw "BuildName is mandatory, please provide a value.")
    )

    Write-Host "Build name is: $BuildName"
}
Run Code Online (Sandbox Code Playgroud)


ohw*_*ohw 21

@Emperor XLII在这个问题上有一个很好的评论,我认为对于某些用例来说这是一个更好的答案:

如果powershell.exe使用该-NonInteractive标志运行,则缺少必需参数将导致错误并导致该进程的非零退出代码.

使用它的原因可能是:

  1. 你有很多这样的Mandatory=$true参数,转换所有这些参数的成本很高.
  2. 该脚本将以交互方式和非交互方式使用,并且在以交互方式运行时,您确实希望提示缺少参数.