提问人:Darren 提问时间:11/10/2023 更新时间:11/10/2023 访问量:34
匹配命令行参数 disable 或 enable only
match command line arguments disable or enable only
问:
不确定如何进行以下操作 - 脚本将只接受“启用”或“禁用”的命令行选项,任何其他选项都会导致显示帮助消息。
我在下面使用此代码,如果命令行参数与“启用”或“禁用”不匹配,我还想显示帮助消息。
if ([string]::IsNullOrEmpty($args)) {
write-host "You must use either enable or disable as a command line argument.`n`n`te.g. .\""$(Split-Path -leaf $PSCommandpath)"" disable"
} else {
Write-Host "$osName $bit (Build $buildNumber) Release ID $displayVersion"
}
答:
1赞
mklement0
11/10/2023
#1
使脚本成为高级脚本,这样您不仅可以显式声明参数,还可以创建参数:
- 命令的
- 防止传递意外参数
- 控制哪些参数是位置参数(即可以由不以参数名称开头的值绑定)
[ValidateSet()]
属性允许您将参数限制为一组给定的值:
[CmdletBinding()]
param(
[ValidateSet('enable', 'disable')]
[Parameter(Mandatory, Position=0)]
$TargetState
)
"`$TargetState argument given: [$TargetState]"
注意:
在 Windows PowerShell 中,必须使用默认错误消息(有点冗长),如果两者都未传递或传递,则显示该错误消息。
enabled
disabled
在 PowerShell (Core) 7+ 中,可以将可选属性用于自定义错误消息;例如:
ErrorMessage
[ValidateSet('enable', 'disable', ErrorMessage = "'{0}' is not in set '{1}'")]
强制参数意味着,如果调用时未给出任何值,PowerShell 会提示输入一个值。
- 如果你更愿意在这种情况下报告错误(鉴于这些提示的 UX 还有很多不足之处 - 请参阅 GitHub 问题 #4068),请使用带有子表达式的默认值 - 有关详细信息,请参阅此答案。
$(throw "...")
- 如果你更愿意在这种情况下报告错误(鉴于这些提示的 UX 还有很多不足之处 - 请参阅 GitHub 问题 #4068),请使用带有子表达式的默认值 - 有关详细信息,请参阅此答案。
0赞
Darren
11/10/2023
#2
if (-not($args -in $("enable","disable"))) {
write-host "You must use either enable or disable as a command line argument.`n`n`te.g. .\""$(Split-Path -leaf $PSCommandpath)"" disable"
} else {
Write-Host "$osName $bit (Build $buildNumber) Release ID $displayVersion"
}
评论