31

PowerShell 関数でパラメーターを作成する方法はありますか?それを考慮するために呼び出す必要がありますか?

コマンドレットで与えられた例(太字は私がやりたいことです):

Invoke-Command -computername Server01 -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」が存在し、それに引数がある場合は、設定された引数ではなくそれを使用したいと思います。

4

3 に答える 3

37

Powershell は、必須パラメーター、オプション パラメーター、"スイッチ" (別名フラグ) パラメーター、"パラメーター セット" など、一般的なパラメーター シナリオに対して多くの組み込みサポートを提供します。

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

Powershell が提供できるすべての特別なサポートについて知りたい場合は、次のリンクを確認してください。

about_関数

about_Functions_Advanced

about_Functions_Advanced_Parameters

于 2012-12-03T17:07:11.347 に答える
30

あなたの質問はあまり明確ではないと思います。このコードは、-domain パラメーターを含める場合、常に「名前付き」であることを前提としています (つまり、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"
    }
}
于 2012-12-03T18:18:14.280 に答える
10

質問を正しく理解しているかどうかわかりません。

私が収集したものから、ドメインがnullの場合にドメインに値を割り当て、$ 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"

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

于 2012-12-03T16:59:01.770 に答える