如何在将参数丢失到cmdlet

时间:2017-11-28 13:30:26

标签: powershell powershell-v5.0

假设我有一个cmdlet:

function Set-Something
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string] $SomeValue
    )
}

以及调用我的cmdlet的一些自动化:

Set-Something

这将使powershell会话暂停并将其写入屏幕:

  

cmdlet Set-Something at命令管道位置1   提供以下参数的值:   someValue中:

这在进行自动化时非常烦人:我们真正想要的是PowerShell不会永远停止期望永远不会出现的用户输入,而是我们只是希望它抛出一个异常“调用Set-Something中的Missing参数”。

这可能吗?

2 个答案:

答案 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