2017-03-21 38 views
2

我有這個功能如何在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有一個默認值,並使用該功能。可能嗎?只有當我指定一個參數時才運行它。

例如這個工程:Do-ThisOrThat -FirstParam "Hello"

+0

'如果($ PSCmdlet.ParameterSetName -eq「第一」 - 和 - 而不是$ PSBoundPa rameters.ContainsKey('FirstParam')){<#$ FirstParam有默認值#>} –

回答

5

你需要告訴PowerShell中的哪些參數設置爲默認的:

[cmdletbinding(DefaultParameterSetName="First")] 

這將讓你與一個-SecondParameter值調用Do-ThisOrThat不帶任何參數,以及和$FirstParam在兩種情況下都將具有其默認值。

注意,但是,基於如何定義你的參數設置,如果你指定參數,你不能這樣做位置上 - 你必須使用參數名稱(-FirstParam-SecondParam)。

3

這個問題有點含糊。

如果要設置默認參數設置,使用DefaultParameterSetName屬性在[CmdletBinding()]屬性:

[CmdletBinding(DefaultParameterSetName='First')] 

如果,另一方面,你要發現和推斷$FirstParam是否有內它的默認值腳本,您可以檢查哪些參數設置已經確定,是否由主叫方的規定FirstParam參數,如:

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