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实例(如此处所述)。

链接地址: http://www.djcxy.com/p/4943.html

上一篇: PowerShell script to return versions of .NET Framework on a machine?

下一篇: How can I run PowerShell with the .NET 4 runtime?