12

動的な数のパラメーターを使用して既存のコマンドレットを呼び出したい。

したがって、これを行う代わりに(例としてwrite-hostを取り上げます)、スマートな方法で行いたいと思います。

# these are the dynamic parameters which maybe get passed into my function or script
# they would be $null be default of course
$forecolor = 'Green'
$newline = $true

# now build the "dynamic" write-host...
if ($forecolor) {
    if ($newline) {
        write-host -fore $forecolor "Hello world"
    }
    else {
        write-host -fore $forecolor "Hello world" -nonewline
    }
}
else {
    if ($newline) {
        write-host "Hello world"
    }
    else {
        write-host "Hello world" -nonewline
    }
}

もちろん、これは非常に醜いです。私がそれをより美しくするのを手伝ってください!

「-foreGreenHelloworld」$forecolor = '-fore Green'のみを出力する設定をすでに試しました。引数のリストを関数に渡し、リスト内の各引数に対応するパラメーターを追加することを考えることができます-パラメーターを保持する方法がわかりません。

4

1 に答える 1

20

Write-Host変数を引数として:に渡すことができます。

Write-Host -Fore $forecolor -NoNewLine:(!$newline) 'Hello World'

真に動的な方法として、ハッシュテーブルを使用できます。

$params = @{ NoNewLine = $true; ForegroundColor = 'Green' }

次に、スプ​​ラット演算子を使用します

Write-Host @params Hello World

そのように呼び出す前に、必要に応じてパラメーターとその値をハッシュテーブルに追加できますWrite-Host

于 2012-06-22T08:18:50.967 に答える