传递不带参数的参数,如“-Force”

Pass parameter with no argument, like '-Force'

提问人:upgrad3 提问时间:11/9/2023 更新时间:11/9/2023 访问量:39

问:

我想定义一个参数,以便在调用函数时仅接受参数名称或别名;即在调用 cmdlet 并使用“-Force”时。

我有一个“用户输入”功能,并希望该函数有一个选项来接受用户的可选输入(用户只需点击“Enter”而不提供输入)。

对于调用函数时的示例:

$usrInput = uInput “请输入计算机名称” -AllowNull

我试图允许传递“-AllowNull”,传递后,该函数将接受一个空字符串。而不是使用参数调用函数:

$usrInput = uInput “请输入计算机名称” -AllowNull “是”

$usrInput = uInput “请输入计算机名称” -AllowNull $True

我尝试了不同的组合:

[AllowNull()]
[AllowEmptyString()]
[Validatenotnullorempty()]
[string]$allowNull

一些组合会起作用,我可以检查 $allowNull 的值('has value'、bool. 或 $null/'Empty'),但在调用函数时我仍然需要传递参数;不能只使用“-AllowNull”

我什至尝试过“[switch]”参数:

[switch]$allowNull

但是,在调用函数时,这仍然需要布尔值作为参数。

PowerShell 函数 参数

评论

6赞 Mathias R. Jessen 11/9/2023
[swtch]$allowNull是正确的。不起作用?& {param([switch]$AllowNull)} -AllowNull
2赞 mclayton 11/9/2023
此外,如果要显式指定开关参数的状态,可以按如下方式执行:或 ,甚至(即开关名称、冒号、布尔值或变量名称,不带空格)。裸语法等同于...-AllowNull:$true-AllowNull:$false-AllowNull:$somevariable-AllowNull-AllowNull:$true
0赞 upgrad3 11/10/2023
你们俩都是对的。我想我一次做了太多的改变,只是错过了一些东西。只需将参数设置为 [switch]$allowNull没有任何属性即可完美运行。感谢您让我仔细检查并简化我的代码,以意识到它首先是正确的。谢谢!+1
2赞 mklement0 11/10/2023
@mclayton:实际上,虽然你通常会看到无空格的形式(),这可以说是可取的,但空格允许的;例如 唯一的例外 - 尚未修复 - 是通过 -File 进行 CLI 调用,其中当前不能有空格 - 请参阅 GitHub 问题 #10838-Foo:$false& { param([switch] $Foo) $Foo } -Foo: $false

答: 暂无答案