PowerShell脚本在机器上返回.NET Framework的版本?
PowerShell脚本将在机器上返回.NET Framework的版本是什么?
我的第一个猜测是涉及WMI的东西。 有什么更好的吗?
它应该是一个简单的函数,用于返回每个.NET [每行]安装的最新版本。
如果您要使用注册表,您必须进行递归才能获得4.x框架的完整版本。 以前的答案都返回在我的系统上的.NET 3.0的根号码(其中WCF和WPF号码,嵌套在3.0以下,更高 - 我无法解释),并没有返回任何东西的4.0 .. 。
编辑:对于.Net 4.5及以上,这又改变了一点,所以现在有一个很好的MSDN文章解释了如何将Release值转换为.Net版本号,这是一个总的火车残骸:-(
这对我来说看起来很合适(请注意,它在3.0版上为WCF和WPF输出单独的版本号,我不知道这是什么)。 它还会在4.0版本上输出Client和Full(如果您安装了它们):
Get-ChildItem 'HKLM:SOFTWAREMicrosoftNET Framework SetupNDP' -recurse |
Get-ItemProperty -name Version,Release -EA 0 |
Where { $_.PSChildName -match '^(?!S)p{L}'} |
Select PSChildName, Version, Release
根据MSDN文章,您可以构建一个查找表,并在4.5之后返回发行版的营销产品版本号:
$Lookup = ConvertFrom-Csv 'Version|Release
4.5|378389
4.5.1|378675
4.5.1|378758
4.5.2|379893
4.6|393295
4.6|393297
4.6.1|394254
4.6.1|394271
4.6.2|394802
4.6.2|394806
4.7|460798
4.7|460805
4.7.1|461308
4.7.1|461310
' -Delimiter "|"
Get-ChildItem 'HKLM:SOFTWAREMicrosoftNET Framework SetupNDP' -recurse |
Get-ItemProperty -name Version,Release -EA 0 |
Where { $_.PSChildName -match '^(?!S)p{L}'} |
Select PSChildName, Version, Release, @{
name = "Product"
expression = {
$Lookup | ? Release -eq $_.Release | % Version
}
}
事实上,由于我不断更新这个答案,下面是一个脚本,用于从该网页的降价源生成上述脚本。 这可能会在某些时候中断,所以我保留上面的当前副本。
# Get the text from github
$url = "https://raw.githubusercontent.com/dotnet/docs/master/docs/framework/migration-guide/how-to-determine-which-versions-are-installed.md"
$md = Invoke-WebRequest $url -UseBasicParsing
# Replace the weird text in the tables, and the padding
# Then trim the | off the front and end of lines
$map = $md -split "`n" -replace " installed [^|]+" -replace "s+|" -replace "|$" |
# Then select all the lines that start with ".NET Framework"
# and make sure we don't have duplicates
Select-String "^.NET" | Select -Unique
# Then remove the .NET Framework
$map = $map -replace ".NET Framework " -join "`n"
# And just output the script
@"
`$Lookup = ConvertFrom-Csv 'Version|Release
$map
' -Delimiter "|"
Get-ChildItem 'HKLM:SOFTWAREMicrosoftNET Framework SetupNDP' -Recurse |
Get-ItemProperty -name Version,Release -EA 0 |
Where { `$_.PSChildName -match '^(?!S)p{L}'} |
Select PSChildName, Version, Release, @{
name="Product"
expression={
`$Lookup | ? Release -eq `$_.Release | % Version
}
}
"@
gci 'HKLM:SOFTWAREMicrosoftNET Framework SetupNDP' |
sort pschildname -des |
select -fi 1 -exp pschildname
如果安装了此答案,则不返回4.5。 从@Jaykul和使用递归下面的答案确实。
[environment]::Version
为您提供PSH正在使用的CLR Version
实例(如此处所述)。
上一篇: PowerShell script to return versions of .NET Framework on a machine?