我正在处理CSV文件以插入列。如果文件有字段名称的头记录(-hasheader),那么我还需要一个列名(-new_label)值。
我将这两个参数放入参数集中,但如果未使用-hasheader,则不需要-new_label。除非使用-hasheader,否则如何才能使-new_label不被要求?这是必须使用DynamicParam的吗?
[cmdletbinding()]
Param(
[Parameter(Mandatory=$true, position=0)]
[string]$csv_in
,[Parameter(Mandatory=$true, position=1)]
[string]$csv_out
,[Parameter(Mandatory=$true, position=2)]
[string]$column
,[Parameter(Mandatory=$true, position=3)]
[string]$new_value
,[Parameter(Mandatory=$false, ParameterSetName="HeaderRecord")]
[switch]$hasheader
,[Parameter(Mandatory=$true, ParameterSetName="HeaderRecord")]
[string]$new_label
,[Parameter(Mandatory=$false)]
[string]$delimiter = ','
,[Parameter(Mandatory=$false)]
[string]$quote = '"'
)
我也尝试了以下内容。 PowerShell没有抱怨Mandatory值是一个脚本块,但它仍然需要new_label参数。
,[Parameter(Mandatory={$hasheader -eq $true}, ParameterSetName="HeaderRecord")]
答案 0 :(得分:2)
使默认参数设置为HeaderRecord
以外的其他内容:
[CmdletBinding(DefaultParameterSetName='foo')]
Param(
[Parameter(Mandatory=$true, Position=0)]
[string]$csv_in,
[Parameter(Mandatory=$true, Position=1)]
[string]$csv_out,
[Parameter(Mandatory=$true, Position=2)]
[string]$column,
[Parameter(Mandatory=$true, Position=3)]
[string]$new_value,
[Parameter(Mandatory=$false, ParameterSetName="HeaderRecord")]
[switch]$hasheader,
[Parameter(Mandatory=$true, ParameterSetName="HeaderRecord")]
[string]$new_label,
[Parameter(Mandatory=$false)]
[string]$delimiter = ',',
[Parameter(Mandatory=$false)]
[string]$quote = '"'
)