PowerShell 小工具 - 檢查 .NET Framework 4.5+ 版本是否需要升級
| | 0 | | ![]() |
昨天分享 .NET Framework 4.6 編譯程式在版本只到 .NET 4.5.2 主機發生的詭異錯誤訊息,經讀者提醒我才想起今年 4/26 有件事,.NET Framework 4.5.2、4.6、4.6.1 要 EOS 了! 參考:.NET Framework 技術支援終止期限(EOS)整理
.NET 4.x 採「就地相容」政策,Windows 升級 .NET Framework 版本後,原本的 .NET 4.X 程式可繼續執行,不需要重新編譯或調整,基本上不算什麼大問題,可以想成一般的 Windows Update 或 Hotfix,出問題的機率不大,但升級前仍建議測試驗證一下,以求保險,若真有不相容狀況,多半是為了符合業界標準或修正錯誤,遇上就乖乖調整程式。
如何知道主機目前安裝的 .NET Framework 到 4.X?之前分享過列出已安裝 .NET Framework 版本的 PowerShell,時過境遷,現在只需關心主機有沒有裝到 .NET Framework 4.6.2 以上就好。
微軟有份新文件 - How to: Determine which .NET Framework versions are installed,便是聚焦判斷 4.5 之後的 .NET Framework 版本(4.5.2 之前的版本已 EOS,2.0/3.5 安裝 .NET 3.5 SP1 可用到 2029/1/9),由於 4.8 已是 .NET Framework 最後版本(後面就接 .NET Core 3.1/.NET 6 了),這個判斷方法已固定不會再改了。
其原理是由 Registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 的 Release 六位數字判斷,Version 格式為 4.8.04084 比較好讀,但像 4.6.2 的 Version 為 4.6.01586,無法看出是 4.6、4.6.1 還是 4.6.2:
參考官方文件,我寫出以下 PowerShell:
$reg = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
Write-Host "Build: $($reg.Version)"
$release = $reg.Release
Write-Host "Release: $release / " -NoNewline
switch ($release) {
'378389' { '.NET 4.5' }
'378675' { '.NET 4.5.1' <# Win 8.1/2012 R2 #> }
'378758' { '.NET 4.5.1' }
'379893' { '.NET 4.5.2' }
'393295' { '.NET 4.6' <# Win 10 #> }
'393297' { '.NET 4.6' }
'394254' { '.NET 4.6.1' <# Win 10 Nov Update #> }
'394271' { '.NET 4.6.1' }
'394802' { '.NET 4.6.2' <# Win 10 Anniversary Update / Win 2016 #> }
'394806' { '.NET 4.6.2' }
'460798' { '.NET 4.7' <# Win 10 Creators Update #> }
'460805' { '.NET 4.7' }
'461308' { '.NET 4.7.1' <# Win 10 Fall Creators / Win Server 1709 #> }
'461310' { '.NET 4.7.1' }
'461808' { '.NET 4.7.2' <# Win 10 Apr 2018 / Win Server 1803 #> }
'461814' { '.NET 4.7.2' }
'528040' { '.NET 4.8' <# Win 10 May 2019 / Win 10 Nov 2019 #> }
'528372' { '.NET 4.8' <# Win 10 May 2020 / Win 10 Oct 2020 / Win 10 May 2021 #> }
'528449' { '.NET 4.8' <# Win 11 / Win 2022 #> }
'528049' { '.NET 4.8' }
Default { "Unknown - $release" }
}
執行時會顯示 Version (我稱它為 Build,跟口語 4.6, 4.6.1 的 Version 區隔)、Realse 號碼跟判別的 4.X.X 版本:
如此,很快就能知道主機的 .NET 4.X 版本需不需要升級。
如果系統設定允許 PowerShell 遠端管理,我們可以用 Invoke-Command -ComputerName XXX -FilePath .\Check-NetFX45Version.ps1 查詢遠端主機的 .NET 4.X 版本,非常方便:
補充遠端執行 PowerShell 參考:
PowerShell script to check .NET Framework 4.5+ version.
Comments
Be the first to post a comment