2017-03-21 8 views
2

私はそれが$ FirstParamは、デフォルト値を持っていることを検出し、それを使用したい、このDo-ThisOrThatのような関数を呼び出す場合、私はこの機能PowerShellでパラメータセットにデフォルト値を使用する方法は?

Function Do-ThisOrThat 
{ 
[cmdletbinding()] 
param (
    [Parameter(Mandatory = $false, ParameterSetName="First")] 
    [string]$FirstParam = "MyFirstParam", 

    [Parameter(Mandatory = $false, ParameterSetName="Second")] 
    [string]$SecondParam 
    ) 
    Write-Output "Firstparam: $FirstParam. SecondParam $SecondParam" 
} 

を持っています。出来ますか?それを実行するのは、パラメータを指定した場合のみです。

Do-ThisOrThat -FirstParam "Hello"

+0

'場合は「最初の」($ PSCmdlet.ParameterSetNameの-eq - および-not $ PSBoundPa (FirstParam)){{#$ FirstParamにはデフォルト値があります。}} ' –

答えて

5

あなたはデフォルトのものである、あなたのパラメータセットのどのPowerShellを伝える必要があります:これは動作します。これは、あなたが-SecondParameter値と同様に、パラメータなしでDo-ThisOrThatを呼び出すことができるようになります

[cmdletbinding(DefaultParameterSetName="First")] 

、および$FirstParamどちらの場合もデフォルト値を持ちます。あなたは、引数を指定した場合

ただし、お使いのパラメータセットが定義されている方法に基づいていることを、あなたはとても位置を行うことはできません - あなたは、パラメータ名(-FirstParamまたは-SecondParam)を使用する必要があります。

3

この質問は多少曖昧です。

あなたは[CmdletBinding()]属性にDefaultParameterSetNameプロパティを使用し、デフォルトのパラメータセットを設定する場合:一方、あなたは$FirstParamは内部のデフォルト値を持っているかどうかを検出し、推測するに、場合

[CmdletBinding(DefaultParameterSetName='First')] 

スクリプトは、あなたが決定されたパラメータセットを確認することができますし、FirstParamパラメータは、次のように、呼び出し側で指定されたかどうか:

if($PSCmdlet.ParameterSetName -eq 'First' -and -not $PSBoundParameters.ContainsKey('FirstParam')){ 
    <# $FirstParam has default value #> 
} 
関連する問題