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

时间:2012-02-29 20:24:45

标签: powershell

我想在此脚本中调用第二个函数来抛出错误:

function Deploy
{

param(

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

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

}

Deploy "Build123"

Deploy #Currently prompts for input

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

我最好的选择是使用if或其他东西进行自定义验证吗?

2 个答案:

答案 0 :(得分:47)

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

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

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

答案 1 :(得分:19)

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

  

如果您使用powershell.exe标记运行-NonInteractive,则会丢失   强制参数将导致错误并导致非零退出   该过程的代码。

使用它的原因可能是:

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