2014-07-02 51 views
-1

我試圖讓這段代碼正常工作,但我無法獲得匹配的版本 - 你能幫忙嗎?Powershell檢查已安裝程序的版本號

$Version = Get-ChildItem hklm:\software\microsoft\windows\currentversion\uninstall | ForEach-Object {Get-ItemProperty $_.pspath} | Where-Object { 
$_.PSChildName -Eq '{BFAE8D5B-F918-486F-B74E-90762DF11C5C}'} | Select-Object Version 

Write-Host $Version 

if ($Version -eq 67436760) 
{ 
    Write-Host "Version match" 
} 
else 
{ 
    Write-Host "Not Matched" 
} 
+0

你可以在**簡單地添加 - ExpandProperty **轉換爲'選擇-對象-Version',爲了回報**版本的內容**,而不是包含一個對象的屬性屬性。對於這個屬性的幫助還不清楚,但是我剛剛發佈了[解釋差異的另一個問題的答案](http://stackoverflow.com/a/24535790/1248365)......我剛剛注意到了一個不準確的問題,但我會立即修復。 –

回答

1

問題是您正試圖將對象與一個整數進行比較。由於這是錯誤的數據類型,您將始終得到False返回。

要解決這個問題,你只需要添加 「.Version」 是這樣的:

如果($ Version.Version -eq 67436760) { 寫主機 「版本匹配」 } 其他 { 寫-Host「Not Matched」 }

這將檢索對象內的整數而不是對象本身。

問候

+0

Thx很多,只是學習Powershell :) – Bendo1984

0

您需要更好地捕獲該版本變量並將其轉換爲整數。使用方法:

Write-Host $Version 
[int]$Version=$Version.version 
+0

將它作爲整數進行投射並不是必須的。 **版本**屬性已經是一個整數。 –