1

Тема: 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.

2 (изменено: Poltergeyst, 2009-11-28 21:15:42)

Re: WSH: получение версии установленного .NET Framework

Еще один вариант определения версии установленного .NET Framework, через разбор свойства userAgent объекта navigator (для Internet Explorer):
Language: JScript.

//--------------------------------------------------------------------
// JScript: Получение версии установленного .NET Framework
//--------------------------------------------------------------------
var initObj=new ActiveXObject('htmlfile')
initObj.open()

var rexp=/(\.NET.[^;)]+)/ig
var cInfo=initObj.parentWindow.clientInformation['userAgent']    //Вариант 1
//var cInfo=initObj.parentWindow.navigator['userAgent']        //Вариант 2

initObj.close()

    if (!rexp.test(cInfo))
    {
        WScript.Echo('.NET Framework не установлен.')
    }
    else
    {
        strVer=''
        m=cInfo.match(rexp)
        for (i=0;i<m.length;i++){strVer=strVer+'\n'+m[i]}
        WScript.Echo('Версия установленного .NET Framework: \n'+strVer)
    }


WScript.Quit()
//--------------------------------------------------------------------