如何更改参数的抛出消息?

2024-06-21

问题: 希望更改显示的错误消息,表示需要将“-passed”、“-warning”或“-failed”包含在 cmdlet 参数中,或者不关心这三个参数是否丢失并写入消息(假设它在那里) 。

解释: 创建了一个接受三个参数的函数:一条消息、第二条消息和消息状态(通过、 失败,警告)。我收到默认错误消息“无法使用指定的命名解析参数” 参数。”无论您是否通过以下方式传递消息,都会发生这种情况:

PS C:\> Write-Message;
Write-Message : Parameter set cannot be resolved using the specified named parameters.
...
//or
PS C:\> Write-Message -Message "Hello World";

但如果您输入“status”参数,它将毫无问题地工作:

PS C:\> Write-Message -Message "Hello World" -Passed;
Hello World 

(“Hello World”在这里应该是绿色,但 Stack Overflow 还没有这个功能)

有问题的函数:

Function Write-Message {
    param(
        [string]$Message,
        [string]$MessageTwo,
        [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName = $true, ParameterSetName ="Passed")][switch]$Passed,
        [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName = $true, ParameterSetName ="Warning")][switch]$Warning,
        [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName = $true, ParameterSetName ="Failed")][switch]$Failed
    );
    $NewLineNeeded = [string]::IsNullOrEmpty($MessageTwo);

    if ($Passed){
        $color = 'green';
    }
    if($Warning){
        $color = 'yellow';
    }
    if($Failed){
        $color = 'red';
    }

    if($Passed -or $Warning -or $Failed){
        if(!$NewLineNeeded){
            Write-Host $MessageOne -NoNewline;
            Write-Host $MessageTwo -ForegroundColor $color;
        } else {
            Write-Host $Message -ForegroundColor $color;
        }  
    }
}

添加“默认”参数集来解决此问题。您实际上不必使用代码中设置的参数,因此即使使用“默认”之类的内容也可以工作,而无需对代码进行额外更改。我自己在编写更复杂的 cmdlet 时也遇到过这种情况,其中我使用参数集作为互斥参数,但有些参数与参数集无关。

Function Write-Message {
  [CmdletBinding(DefaultParameterSetName="Default")]
  Param(
...

当您仅使用没有参数集的参数并且您还在 cmdlet 中定义了参数集时,Powershell 似乎会对正在使用的参数集感到困惑。

您只需满足以下所有条件即可执行此操作:

  • 已明确定义两个或多个参数集
  • 尚未将现有参数集之一绑定为默认参数集
  • 拥有未绑定到任一集合的参数(并使用其调用例程)

正如中所解释的mklement0 的回答 https://stackoverflow.com/a/58976252/584676,以及发生的情况的一些幕后信息,这可能是某种错误,此解决方案是解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改参数的抛出消息? 的相关文章

随机推荐