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

如果省略了必需的参数,是否可以强制PowerShell脚本抛出?,powershell,Powershell,我希望此脚本中的第二个函数调用引发错误: function Deploy { param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$BuildName ) Write-Host "Build name is: $BuildName" } Deploy "Build123" Deploy #Currently prompts for input 提示对于以

我希望此脚本中的第二个函数调用引发错误:

function Deploy
{

param(

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

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

}

Deploy "Build123"

Deploy #Currently prompts for input
提示对于以交互方式使用脚本非常有用,但这也将由构建服务器执行


我的最佳选择是仅使用
if
或其他什么进行一些自定义验证吗?

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

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

    Write-Host "Build name is: $BuildName"
}
在这个问题上有一个很好的评论,我认为对于某些用例来说,这是一个更好的答案:

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

使用此选项的原因可能是:

  • 您有很多这样的
    强制=$true
    参数,转换所有这些参数的成本很高
  • 该脚本将以交互方式和非交互方式使用,当以交互方式运行时,您确实希望收到提示,提示您输入缺少的参数

  • 请注意,如果使用
    -NonInteractive
    标志运行powershell.exe,缺少必需参数将导致错误,并导致进程的退出代码为非零。请查看此问答,我在其中发布了一个解决方案,该解决方案不涉及手动调用powershell可执行文件,而是使用后台作业。奇怪的是,对于管道绑定的参数,默认值仍然被计算,这似乎使得该技术无法在缺少参数时抛出错误……至少在使用管道参数时是这样。讨论使用管道参数时此解决方案的不幸缺点。