2012-02-29 25 views
26

我想在这个脚本的第二个函数调用抛出一个错误:是否有可能强制PowerShell脚本抛出,如果所需的参数被省略?

function Deploy 
{ 

param(

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

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

} 

Deploy "Build123" 

Deploy #Currently prompts for input 

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

是我最好的赌注只是做一些自定义验证if什么的?

+6

请注意,如果使用'-NonInteractive'标志运行powershell.exe,缺少必需参数将导致错误并导致进程的非零退出代码。 – 2012-05-21 13:07:16

回答

41

一旦参数被标记为必需,PowerShell将提示输入值。这就是说,如果你删除强制属性,那么你可以设置一个throw语句的默认值:

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

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

奇怪的是,对于管道绑定参数,默认值仍然被评估,这似乎使得这个技术在参数丢失时不能抛出错误......至少如果你使用的是管道参数。 – alx9r 2015-02-21 00:58:55

+0

[此问题](https://stackoverflow.com/questions/33600279)讨论了如果您使用管道参数,此解决方法的不幸缺点。 – alx9r 2015-11-09 18:36:20

15

@Emperor XLII有问题,我认为对于一些使用情况更好的回答一个很好的注释:

if you run powershell.exe with the -NonInteractive flag, missing mandatory parameters will cause an error and result in a non-zero exit code for the process.

使用这种情况的原因可能是:

  1. 你有很多这样的Mandatory=$true参数和成本高的所有转换他们。
  2. 该脚本将以交互方式和非交互方式使用,当以交互方式运行时,您确实希望被提示输入缺少的参数。
相关问题