工作上常遇到的需求:在陌生機器上想確認已安裝的 .NET Runtime 版本,只有 4.0,還是已升到 4.5.2 甚至 4.6?
MSDN 建議的官方做法是檢查 Registry,程式邏輯不複雜要自己寫個小工具並不困難,但每次測試得 Copy 程式檔太搞剛,於是我想到了 PowerShell!
在 Stackoverflow 找到網友分享用 Powershell 檢查 .NET 版本的範例:
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse |
Get-ItemProperty -name Version,Release -EA 0 |
Where { $_.PSChildName -match '^[^0-9S]'} |
Select PSChildName, Version, Release, @{
name="Product"
expression={
switch -regex ($_.Release) {
"378389" { [Version]"4.5" }
"378675|378758" { [Version]"4.5.1" }
"379893" { [Version]"4.5.2" }
"393295|393297" { [Version]"4.6" }
"394254|394271" { [Version]"4.6.1" }
"394802|394806" { [Version]"4.6.2" }
{$_ -gt 394806} { [Version]"Undocumented 4.6.2 or higher, please update script" }
}
}
}
註:Stackoverflow 上原本的寫法是 Where { $_.PSChildName -match '^(?!S)\p{L}'} ,用到的 Regular Expression 語法有點生澀難懂:^(?!S) 指明第一個字母不可是 S 以排除 Setup;\p{L} 則規定必須字母起首(參考:Unicode Category)排除 1033、1028 等語系代碼項目,我改用 ^[^0-9S] ,結果相同,但好記好懂許多。
測試成功!以上是我找到最快速查出 .NET 已安裝版本的方法。