具有可选值的 PowerShell 数组参数

问题描述 投票:0回答:1

我希望我的 PS 脚本有这样的界面:

tool.ps1 -Update item1, item2, item3 # Update individual items
tool.ps1 -Update # Update all items

我已经尝试了所有已知的属性组合(AllowEmptyCollection 等),但仍然无法让第二个示例工作:PS 要求提供参数值。

有什么想法吗?

powershell parameters
1个回答
0
投票

您可以通过将

-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
© www.soinside.com 2019 - 2024. All rights reserved.