1

以下のコードを見てください。最初の「if」ステートメントだけでこれを実行すると、望ましい結果が得られます。2 番目の "if" ステートメントを (以下に示すように) 追加すると、目的の結果が得られません。ここで何が問題なのか、PowerShell が 2 つの異なる方法で動作するのはなぜですか!

$CACHE_OS = ""
$OPERATINGSYSTEM = "WIN832_9200"

if ( $OPERATINGSYSTEM -match "WIN832" ) { $CACHE_OS = "WIN832" } else { $CACHE_OS = $OPERATINGSYSTEM }
if ( $OPERATINGSYSTEM -match "WIN864" ) { $CACHE_OS = "WIN864" } else { $CACHE_OS = $OPERATINGSYSTEM }

$CACHE_OS

参考までに: 上記の読みやすさと説明のために、条件ステートメントをワンライナーにフォーマットしました。

4

2 に答える 2

4

これは予期される動作です。制御フローがどのように進行するかを誤解している可能性があると思います。

$CACHE_OS = ""
$OPERATINGSYSTEM = "WIN832_9200"

if ( $OPERATINGSYSTEM -match "WIN832" )  # true
{
  $CACHE_OS = "WIN832"  # $cache_os set to "WIN832"
}
else
{
  $CACHE_OS = $OPERATINGSYSTEM
}

# at this point $cache_os has a value of "WIN832"

if ( $OPERATINGSYSTEM -match "WIN864" ) # false
{
  $CACHE_OS = "WIN864"
}
else # control goes here
{
  $CACHE_OS = $OPERATINGSYSTEM   # $cache_os is re-assigned, new value is "WIN832_9200"
}

$CACHE_OS  # output the current value ("WIN832_9200")

多分あなたが意図したのは、elseifステートメントを使用することですか?

$CACHE_OS = ""
$OPERATINGSYSTEM = "WIN832_9200"

if ( $OPERATINGSYSTEM -match "WIN832" )
{
  $CACHE_OS = "WIN832"
}
elseif ( $OPERATINGSYSTEM -match "WIN864")
{
  $CACHE_OS = "WIN864"
}
else
{
  $CACHE_OS = $OPERATINGSYSTEM
}
于 2012-08-27T23:26:14.220 に答える
0

期待どおりに動作しています。最初の IF では、$OPERATINGSYSTEM は "WIN832" に一致するため、$CACHE_OS は "WIN832" に設定されます。ご想像のとおり、ELSE ステートメント リストは実行されません

2 番目の IF では、$OPERATINGSYSTEM が「WIN832」と一致しないため、IF ステートメント リストがスキップされ、ELSE 部分が開始され、$CACHE_OS に $OPERATINGSYSTEM の値である「WIN832_9200」が割り当てられます。

于 2012-08-28T06:42:55.357 に答える