Powershell“特殊”开关参数

Ria*_*ana 5 parameters powershell switch-statement

我有下面的powershell功能

Function Test
{
    Param
    (               
        [Parameter()]
        [string]$Text = "default text"
    )

    Write-Host "Text : $($Text)"
}
Run Code Online (Sandbox Code Playgroud)

我希望能够像下面这样调用这个函数:

Test -Text:应在主机上显示默认文本

测试-文本“另一文本”:应在主机上显示提供的文本

我的问题是 powershell 中不允许第一个语法..

我有什么想法可以实现这个目标吗?我想要一种可以采用布尔值以外的值的“开关”参数。

谢谢

The*_*le1 6

您遇到的问题是参数绑定。PowerShell 正在看到[string] $Text并期待一个值。您可以像这样解决这个问题:

function Test {
    param(
        [switch]
        $Text,

        [Parameter(
            DontShow = $true,
            ValueFromRemainingArguments = $true
        )]
        [string]
        $value
    )

    if ($Text.IsPresent -and [string]::IsNullOrWhiteSpace($value)) {
        Write-Host 'Text : <default text here>'
    }
    elseif ($Text.IsPresent) {
        Write-Host "Text : $value"
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:这是一个 hacky 解决方案,当未传递参数时,您应该有一个默认值。