Тема: WSH: получение версии установленного .NET Framework
В статье PowerShell – контроль окружения с блога Ильи Сазонова предлагается для этого пользовать ветвь реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform», где параметры «.NET CLR…» суть версии установленных паков платформы .NET Framework:
Другое дело библиотеки .NET Framework и их версия. Я нашел вот такой несколько странный способ выяснить какой «донет» установлен на компьютере:
…
Несмотря на странность этого метода, он работает! Изначально метод рассчитан на извещение браузером web-сервера какая версия «дотнет» установлена на клиенте, для того чтобы сервер мог корректно сгенерировать код страницы для клиента [сие может быть видно в «User-Agent:» — alexii]. Но это не мешает нам использовать его в PowerShell для контроля окружения.
Сам скрипт:
Option Explicit
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
Const strTest = ".NET CLR "
Dim objSWbemServicesEx
Dim strComputer
Dim arrValueNames, arrValueTypes
Dim i
strComputer = "."
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\Default")
If objSWbemServicesEx.Get("StdRegProv").EnumValues( _
HKEY_LOCAL_MACHINE, _
"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform", _
arrValueNames, _
arrValueTypes) = 0 Then
For i = LBound(arrValueNames) To UBound(arrValueNames)
If arrValueTypes(i) = REG_SZ Then
If Left(arrValueNames(i), Len(strTest)) = strTest Then
WScript.Echo Mid(arrValueNames(i), Len(strTest) + 1)
End If
End If
Next
End If
Set objSWbemServicesEx = Nothing
WScript.Quit 0
Возможный результат:
1.1.4322
2.0.50727
3.0.04506.30
3.0.04506.648
3.0.4506.2152
3.5.30729
Отдельное спасибо The gray Cardinal.