如果省略了必需的参数,是否可以强制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可执行文件,而是使用后台作业。奇怪的是,对于管道绑定的参数,默认值仍然被计算,这似乎使得该技术无法在缺少参数时抛出错误……至少在使用管道参数时是这样。讨论使用管道参数时此解决方案的不幸缺点。