如何查看Windows Server 2012 R2上的.NET版本及是否安装过.NET 4.6?
查看Windows Server 2012 R2上的.NET版本及判断是否曾安装过.NET 4.6
我来帮你梳理下解决思路——你的原PowerShell脚本确实有局限性,因为.NET 4.x的版本信息藏得更深,而且高版本会覆盖低版本的注册表显示,但我们可以通过更细致的注册表查询、更新记录和安装日志来找到痕迹。
一、更精准的注册表查询方法
先试试这个改进后的PowerShell脚本,它能抓取到更完整的.NET版本信息,包括关键的Release编号(这个是区分4.6及以上版本的核心):
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Where-Object { $_.Property -match 'Version|Release' } | Select-Object PSPath, @{Name='Version'; Expression={$_.GetValue('Version')}}, @{Name='Release'; Expression={$_.GetValue('Release')}} | Sort-Object Version
针对Windows Server 2012 R2,.NET Framework 4.6对应的Release值是393295。如果你的系统现在装的是4.7,这个值会被覆盖成4.7对应的编号,但我们可以从其他地方找痕迹。
二、检查Windows更新历史记录
.NET 4.6通常是作为Windows更新包安装的,对应的KB编号是KB3045563。你可以这么查:
- 打开控制面板 → 程序 → 查看已安装的更新,在列表里搜这个KB号
- 或者直接查注册表的更新记录:
导航到HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages,搜索包含KB3045563的包:- 如果状态是
Installed:说明当前还装着(但你现在是4.7,大概率是被替代了) - 如果是
Superseded:表示被更高版本(比如4.7)覆盖了,证明曾经安装过4.6 - 如果是
Uninstalled:说明4.6曾被安装后又卸载了
- 如果状态是
三、查看.NET安装日志
.NET Framework的安装日志会保留下来,哪怕后续升级了版本。你可以去这两个路径找:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\ExtendedC:\Windows\Temp文件夹下的Microsoft .NET Framework 4.6 Setup_*.log文件
打开这些日志,搜索.NET Framework 4.6或者KB3045563,就能找到是否有过安装记录。
四、关于你原脚本的补充说明
你原脚本返回的4.0.0.0是.NET 4.x的主版本号,而4.7.02558是当前生效的4.7版本。因为.NET 4.x是增量更新,高版本会直接覆盖低版本的注册表显示,但旧版本的安装痕迹不会凭空消失,通过上面的方法就能挖出来。
内容的提问来源于stack exchange,提问作者user2066489




