我希望我的 PS 脚本有这样的界面:
tool.ps1 -Update item1, item2, item3 # Update individual items
tool.ps1 -Update # Update all items
我已经尝试了所有已知的属性组合(AllowEmptyCollection 等),但仍然无法让第二个示例工作:PS 要求提供参数值。
有什么想法吗?
您可以通过将
-Update
参数与可选参数分开来实现所描述的行为:
[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
[Parameter(Mandatory = $true, ParameterSetName = 'Update')]
[switch]$Update,
[Parameter(ValueFromRemainingArguments = $true, DontShow = $true)]
[string[]]$Values
)
if ($PSCmdlet.ParameterSetName -eq 'Update') {
# update requested
if ($Values.Count) {
Write-Host "Updating items: $($Values -join ', ')"
}
else {
Write-Host "Updating all items!"
}
}
else {
Write-Host "No update requested"
}
这应该给你你想要的行为:
PS ~> .\tool.ps1 -Update
Updating all items!
PS ~> .\tool.ps1 -Update item1, item2, item3
Updating items: item1 item2 item3
PS ~> .\tool.ps1
No update requested