假设我有一个cmdlet:
function Set-Something
{
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string] $SomeValue
)
}
以及调用我的cmdlet的一些自动化:
Set-Something
这将使powershell会话暂停并将其写入屏幕:
cmdlet Set-Something at命令管道位置1 提供以下参数的值: someValue中:
这在进行自动化时非常烦人:我们真正想要的是PowerShell不会永远停止期望永远不会出现的用户输入,而是我们只是希望它抛出一个异常“调用Set-Something中的Missing参数”。
这可能吗?
答案 0 :(得分:2)
只需删除[Parameter(Mandatory)]
部分并在函数内验证它:
function Set-Something
{
[CmdletBinding()]
param(
[string] $SomeValue
)
if (!$SomeValue)
{
throw "Missing parameter in call to Set-Something"
}
}
答案 1 :(得分:2)
将[Parameter(Mandatory)]
删除为Avshalom suggests时,另一种保留自我文档优势的解决方案可能是以非交互方式运行PowerShell。
使用-Noninteractive
以非交互模式启动PowerShell。然后,您应该收到一个尊重[Parameter(Mandatory)]
的错误。
Set-Something : Cannot process command because of one or more missing mandatory parameters: SomeValue.
At line:1 char:1
+ Set-Something
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-Something], ParameterBindingException
+ FullyQualifiedErrorId : MissingMandatoryParameter,Set-Something