1

助けが要る!

私はかなり難しい問題を抱えています。解決したいと思います。私は配列を持っています:

@array = string, string, string

私の例では:

yellow, red, blabla

配列からこれらの文字列を使用し、追加の if 句を使用してコマンドレットに配置し (説明が難しいため、表示した方がよいでしょう)、コマンドレットに追加する前にそれらが存在するかどうかを確認したいと思います。

$array = @()
$array += "red"
$array += "blabla"
$command = write-host
if ($array[0]) {$command = $command + " -foregroundcolor $array[0]"}
if ($array[1]) {$command = $command + " -object $array[1]"}
&$command

これは明らかに機能しません。問題は、単一のコマンドレットの特定のパラメーターを文字列と一緒に困惑させるにはどうすればよいかということです。

Error tells me more or less, that this no commandlet or executable script.

私が持っていた別のアイデアですが、単純にとどまらないため、避けたいと思います:

If (!$array[0]) {
              (if (!$array[1]) {write-host "nodata"} else {write-host -object $array[1]})
else
                   (if (!$array[1]) {write-host -foregroundcolor $array[0]}
                   else {write-host -forgroundcolor $array[0] -object $array[1]})
                }

すでにエラーが発生しています。

4

2 に答える 2

4

あなたが探しているのはsplattingだと思います。パラメーターの名前と値のペアを表すハッシュを作成し、それをコマンドレットに渡します。これにより、switch またはネストされた if/else ブロック内でコマンドレットを呼び出す方法のさまざまな順列をコピー アンド ペーストすることなく、条件付きでコマンドレットのパラメーターを設定する非常に簡単な方法が実現します。

$MyParms = @{};    
$array = @()
$array += "red"
$array += "blabla"
if ($array[0]) {$MyParms.Add("foregroundcolor",$array[0])};
if ($array[1]) {$MyParms.Add("object",$array[1])};

Write-Host @MyParms;
于 2013-10-09T20:15:24.520 に答える
2

これはよくある問題です。「コマンドレットを呼び出したいのですが、さまざまなプログラム条件に応じて、いくつかのパラメーターが存在する/欠落しています。」

標準的な解決策は、引数をハッシュテーブルに入れ、 splattingを使用して渡すことです。

$array = @()
$array += "red"
$array += "blabla"

$params = @{}
if ($array[0]) { $params['foregroundcolor'] = $array[0] }
if ($array[1]) { $params['object'] = $array[1] }

write-host @params
于 2013-10-09T20:15:33.717 に答える