2017-09-19 49 views
0

我正在處理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")] 

回答

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 = '"' 
) 
相關問題