यदि आप रजिस्ट्री का उपयोग करने जा रहे हैं, तो आपको 4.x फ्रेमवर्क के लिए पूर्ण संस्करण प्राप्त करने के लिए पुनरावृत्ति करना होगा। पहले के उत्तर दोनों .NET 3.0 के लिए मेरे सिस्टम पर रूट नंबर लौटाते हैं (जहाँ WCF और WPF संख्याएँ, जो 3.0 के तहत नेस्टेड हैं, उच्चतर हैं - मैं उसे समझा नहीं सकता), और 4.0 के लिए कुछ भी वापस करने में असफल रहा। ।
संपादित करें: .Net 4.5 और ऊपर के लिए, यह थोड़ा फिर से बदल गया है, इसलिए अब यहाँ एक अच्छा MSDN लेख है जो समझा रहा है कि .net संस्करण संख्या में रिलीज़ मान को कैसे परिवर्तित किया जाए , यह कुल ट्रेन मलबे है :-(
यह मुझे सही लगता है (ध्यान दें कि यह 3.0 पर डब्ल्यूसीएफ और डब्ल्यूपीएफ के लिए अलग-अलग संस्करण संख्याओं को आउटपुट करता है। मुझे नहीं पता कि यह क्या है)। यह 4.0 पर ग्राहक और पूर्ण दोनों को आउटपुट करता है (यदि आपके पास दोनों स्थापित हैं):
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse |
Get-ItemProperty -name Version,Release -EA 0 |
Where { $_.PSChildName -match '^(?!S)\p{L}'} |
Select PSChildName, Version, Release
MSDN आलेख के आधार पर, आप एक लुकअप तालिका बना सकते हैं और 4.5 के बाद रिलीज़ के लिए मार्केटिंग उत्पाद संस्करण संख्या वापस कर सकते हैं:
$Lookup = @{
378389 = [version]'4.5'
378675 = [version]'4.5.1'
378758 = [version]'4.5.1'
379893 = [version]'4.5.2'
393295 = [version]'4.6'
393297 = [version]'4.6'
394254 = [version]'4.6.1'
394271 = [version]'4.6.1'
394802 = [version]'4.6.2'
394806 = [version]'4.6.2'
460798 = [version]'4.7'
460805 = [version]'4.7'
461308 = [version]'4.7.1'
461310 = [version]'4.7.1'
461808 = [version]'4.7.2'
461814 = [version]'4.7.2'
528040 = [version]'4.8'
528049 = [version]'4.8'
}
# For One True framework (latest .NET 4x), change the Where-Object match
# to PSChildName -eq "Full":
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -name Version, Release -EA 0 |
Where-Object { $_.PSChildName -match '^(?!S)\p{L}'} |
Select-Object @{name = ".NET Framework"; expression = {$_.PSChildName}},
@{name = "Product"; expression = {$Lookup[$_.Release]}},
Version, Release
वास्तव में, जब से मैं इस उत्तर को अद्यतन करना जारी रखता हूं, उस वेब पेज के लिए मार्कडाउन स्रोत से ऊपर स्क्रिप्ट (थोड़ी अतिरिक्त के साथ) उत्पन्न करने के लिए एक स्क्रिप्ट है। यह शायद किसी बिंदु पर टूट जाएगा, इसलिए मैं वर्तमान प्रतिलिपि ऊपर रख रहा हूं।
# 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
$OFS = "`n"
# 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 we can build the table by looking for unique lines that start with ".NET Framework"
Select-String "^.NET" | Select-Object -Unique |
# And flip it so it's key = value
# And convert ".NET FRAMEWORK 4.5.2" to [version]4.5.2
ForEach-Object {
[version]$v, [int]$k = $_ -replace "\.NET Framework " -split "\|"
" $k = [version]'$v'"
}
# And output the whole script
@"
`$Lookup = @{
$map
}
# For extra effect we could get the Windows 10 OS version and build release id:
try {
`$WinRelease, `$WinVer = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId, CurrentMajorVersionNumber, CurrentMinorVersionNumber, CurrentBuildNumber, UBR
`$WindowsVersion = "`$(`$WinVer -join '.') (`$WinRelease)"
} catch {
`$WindowsVersion = [System.Environment]::OSVersion.Version
}
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -name Version, Release -EA 0 |
# For The One True framework (latest .NET 4x), change match to PSChildName -eq "Full":
Where-Object { `$_.PSChildName -match '^(?!S)\p{L}'} |
Select-Object @{name = ".NET Framework"; expression = {`$_.PSChildName}},
@{name = "Product"; expression = {`$Lookup[`$_.Release]}},
Version, Release,
# Some OPTIONAL extra output: PSComputerName and WindowsVersion
# The Computer name, so output from local machines will match remote machines:
@{ name = "PSComputerName"; expression = {`$Env:Computername}},
# The Windows Version (works on Windows 10, at least):
@{ name = "WindowsVersion"; expression = { `$WindowsVersion }}
"@