2016-10-05 7 views
1

PowerShellセッション変数に格納されている値を使用して、パラメータの既定値を設定できますか?この例ではパラメータの既定値としてPowerShellセッション変数を使用します。

は、セッション変数は、最初の時間を移入スクリプトが実行されているが、その後の実行で使用されていません。

function Get-Authetication 
{ 

    [cmdletbinding()] 
    param(
     [parameter(Mandatory=$true)] 
     [string]$Server = { if ($PSCmdlet.SessionState.PSVariable.Get('Server').Value) { $PSCmdlet.SessionState.PSVariable.Get('Server').Value } }, 

     [parameter(Mandatory=$true)] 
     [pscredential]$Credential = (Get-Credential) 

    ) 

    # store 
    $PSCmdlet.SessionState.PSVariable.Set('Server',$Server) 
    $PSCmdlet.SessionState.PSVariable.Set('Credential',$Credential) 

    # return for testing 
    [PsCustomObject]@{ 
     Server=$PSCmdlet.SessionState.PSVariable.Get('Server').Value; 
     Username=($PSCmdlet.SessionState.PSVariable.Get('Credential').Value).Username 
    } 
} 

Get-Authetication 

答えて

2

これは$PSDefaultParameterValuesを使用して、発信者が行ってください。

かは、デフォルト値を使用するのではなく機能でそれを行う:

function Get-Authetication 
{ 

    [cmdletbinding()] 
    param(
     [parameter()] 
     [string]$Server, 

     [parameter()] 
     [pscredential]$Credential = (Get-Credential) 

    ) 
    if (!$PSCmdlet.SessionState.PSVariable.Get('Server').Value -and !$Server) { 
     $Server = Read-Host 'Enter server' 
     # Alternatively 
     # throw [System.ArgumentException]'You must supply a Server value' 
    } 
    if ($Server) { 
     $PSCmdlet.SessionState.PSVariable.Set('Server',$Server) 
    } 
    $myServer = $PSCmdlet.SessionState.PSVariable.Get('Server').Value 

    # return for testing 
    [PsCustomObject]@{ 
     Server=$myServer; 
    } 
} 

(略し例)

+0

これは(私はその後、(予想通り)、最初は両方の変数の値を指定してするように求められ避けることを望む)。私は何を理解していないのですか? – craig

+0

@craig私は 'Mandatory = $ true'部分を取り除くことを意味しました。更新されたコードをご覧ください。 – briantist

+0

私がこの質問で触れたように、私は最初に(値の場合)プロンプトを表示し、その後のプロンプトは表示しないようにします。私は '$ PSDefaultParameterValues'をコードに設定しようとしましたが、それは望みの効果もありませんでした。 – craig

関連する問題