2012-12-03 8 views
12

PowerShell関数でパラメータを作成して考慮する必要がある場合がありますか?オプションの呼び出し変数を使用して関数を作成する

コマンドレット(太字は私が何をしたいのかである)によって与えられた例:ここでは

Invoke-Command-computernameServer01-Scriptblock{...}

は私が機能して何をしたいかの例です。

Function DoStuff($computername, -arg2, -domain $domain) 
    Test-parameter(-domain) if (-domain -eq $true) { 
     use $domain 
    } 
    Else { 
     $domain = "Domain1" 
    } 
    test-parameter($arg2) { 
     if ($arg2 -eq $true) { 
      Do something 
     } 
     else { 
      Do the opposite 
     } 
    } 

要約:

"-arg2"が存在する場合、私はスクリプトに何か起こりたいです。 "-Domain"が存在し、その引数がある場合は、その引数の代わりに使用します。

答えて

23

Powershellには、必須パラメータ、オプションパラメータ、「スイッチ」(別名フラグ)パラメータ、「パラメータセット」などの一般的なパラメータシナリオが多数組み込まれています。

デフォルトでは、すべてのパラメータはオプションです。最も基本的な方法は、それぞれを$nullのために単にチェックしてから、そこから必要なロジックを実装することです。これは基本的に、サンプルコードですでに示している内容です。

あなたはこれらのリンクをチェックアウト、PowerShellはあなたを与えることができる特別なサポートのすべてを学びたい場合:

about_Functions

about_Functions_Advanced

about_Functions_Advanced_Parameters

+0

パーフェクトおかげトン:私はあなたと共有したい素晴らしい概要/チュートリアル、将来の旅行者を見つけました! – user100541

+2

'[string]'パラメータは空の文字列で初期化され、 '$ null 'ではないことに注意してください。それらは '-eq ''でテストされなければなりません。 – helb

5

私は質問を正しく理解していますかわかりません。

私が収集したことから、nullであればDomainに値を割り当てることができます。また、$ args2が指定されていれば、特定のコードを実行するかどうかを確認できますか?

上記の前提を再構成するようにコードを変更しました。

Function DoStuff($computername, $arg2, $domain) 
{ 
    if($domain -ne $null) 
    { 
     $domain = "Domain1" 
    } 

    if($arg2 -eq $null) 
    { 
    } 
    else 
    { 
    } 
} 

DoStuff -computername "Test" -arg2 "" -domain "Domain2" 
DoStuff -computername "Test" -arg2 "Test" -domain "" 
DoStuff -computername "Test" -domain "Domain2" 
DoStuff -computername "Test" -arg2 "Domain2" 

それは役に立ちましたか?

11

私は考えていませんあなたの質問は非常に明確です、このコードは、あなたが-domainパラメータを含めるつもりならば、常に 'named'(つまり、dostuff computername arg2 -domain domain)と仮定します。これにより、computernameパラメータも必須になります。

Function DoStuff(){ 
    param(
     [Parameter(Mandatory=$true)][string]$computername, 
     [Parameter(Mandatory=$false)][string]$arg2, 
     [Parameter(Mandatory=$false)][string]$domain 
    ) 
    if(!($domain)){ 
     $domain = 'domain1' 
    } 
    write-host $domain 
    if($arg2){ 
     write-host "arg2 present... executing script block" 
    } 
    else{ 
     write-host "arg2 missing... exiting or whatever" 
    } 
} 
関連する問題