2012-08-27 59 views
1

請看下面的代碼。如果我只用第一個「if」語句來運行它,我會得到期望的結果。添加第二個「if」語句(如下所示),我沒有得到想要的結果。這裏出了什麼問題,爲什麼PowerShell有兩種不同的表現方式!PowerShell:有條件的「if」聲明的奇數行爲

$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 

僅供參考:格式化的條件語句爲單行以便於上面的讀取和解釋。

+0

你的「想要的結果是什麼?」當我運行這個時,我得到'$ cache_os ='WIN832_9200''這似乎是預期的。 – latkin

+0

我想要的結果是「WIN832」。如果您僅使用1(「)if」語句運行上面的代碼,就會發生這種情況。 – Vippy

回答

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 
} 
+0

好吧,一個大的「DUH」時刻!當然!對不起,我正在研究這個代碼EOD,我的大腦受到了傷害。再次感謝您的幫助。 – Vippy

0

它按預期工作。在第一個IF中,$ OPERATINGSYSTEM匹配「WIN832」,因此$ CACHE_OS設置爲「WIN832」,如您所期望的,ELSE語句列表未執行

在第二IF,$ OperatingSystem的不匹配「WIN832」,那麼IF語句列表被跳過,else部分在踢和$ CACHE_OS被分配$ OperatingSystem的價值,這是「WIN832_9200」。

+0

謝謝你。 – Vippy