none
Проблема с обращением к Windows Server 2008 SP2 RRS feed

  • Вопрос

  • Добрый день, уважаемые знатоки! Ситуация такая: в сети есть два сервера под управлением Windows Server Ent. 2008 SP2. Один из них 32 бита, второй 64. Есть несколько скриптов, использующих WMI. Эти скрипты замечательно отрабатываются относительно первого сервера, но на 64х-битном вылетают с ошибкой. Например, самый простой скрипт, который определяет разрядность запущенной Windows (приведён ниже) при запуске на самом 64х-сервере отрабатывает без проблем, а при запуске на удалённой машине и обращении к этому серверу вылетает с ошибкой VBscript 800A01CE.

    Привожу текст скрипта:

    Option Explicit
    
    'Скрипт показывает разрядность операционной системы на удалённом компьютере.
    '================================================================
    'НАЧАЛО БЛОКА КОНФИГУРАЦИИ
    Const HKLM = &H80000002
    Const HKCU = &H80000001
    Const HKU = &H80000003
    Const strKeyPath = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
    Const strKeyName = "PROCESSOR_ARCHITECTURE"
    Const TITLE = "Проверка разрядности операционной системы"
    'ОКОНЧАНИЕ БЛОКА КОНФИГУРАЦИИ
    '================================================================
    'Инициализация.
    Dim strComputer, WshNetwork, objReg, objWMI, strKey
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    strComputer = LCase(WshNetwork.ComputerName)
    strComputer = InputBox("Введите имя компьютера:", TITLE & ":", strComputer)
    
    Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
    'Проверяем доступность компьютера
    If Unavailable(strComputer) Then
    	MsgBox "Компьютер недоступен:" & vbCrLf & strComputer, vbExclamation, TITLE
    	strComputer = ""
    End If
    'Проверяем наличие установленного обновления.
    If Len(strComputer) > 0 Then
    	objReg.GetStringValue HKLM, strKeyPath, strKeyName, strKey
    	MsgBox "На компьютере " & strComputer & " установлена система версии " & strKey
    End If
    'В случае ошибки
    If Len(Err.Description) > 0 Then
    	If Not SILENT Then MsgBox strComputer & vbCrLf & "Ошибка:" & vbCrLf & Err.Description, vbExclamation, TITLE
    End If
    ' Завершение исполняемой части
    ' ============================
    
    Function Unavailable(addr)
    	'проверить доступность компьютера в сети
    	'вернуть True, если адрес недоступен
    	Dim ping, p
    	Set objWMI = GetObject("WinMgmts:{impersonationLevel=impersonate}")
    	Set ping = objWMI.ExecQuery("SELECT StatusCode FROM Win32_PingStatus WHERE Address = '" & addr & "'")
    	For Each p In ping
    		If IsNull(p.StatusCode) Then
    			Unavailable = True
    		Else
    			Unavailable = (p.StatusCode <> 0)
    		End If
    	Next
    End Function
    


    21 июня 2011 г. 9:27

Ответы

  • Ха! Я давно подозревал, что я — шляпа, но не до такой же степени...

    Во входящих подключениях были выключены пункты Инструментарий управления WindowsDCOM, и WMI). Включил для локальной подсети, скрипт сразу заработал.


    • Помечено в качестве ответа me4huk 21 июня 2011 г. 12:34
    21 июня 2011 г. 12:09

Все ответы

  • Приведите полный текст сообщения об ошибке и укажите номер строки, в которой она возникает.
    21 июня 2011 г. 10:47
  • Строка 20

    Ошибка: Компьютер удаленного сервера не существует или недоступен: 'GetObject'

    Т.е. при попытке обращения к WMI удалённого сервера.

    21 июня 2011 г. 10:57
  • Вероятно, блокируется подключение (например, встроенным брандмауэром).

    Кстати, у вас доступность узла почему-то проверяется после попытки подключения к нему. Это же бессмысленно.


    21 июня 2011 г. 11:36
  • Ну а по-простому, вам удается в той же самой конфигурации подключиться по сети к 64-битному серверу консолью Управление компьютером? Или подключиться по сети к его реестру?

    21 июня 2011 г. 11:39
    Модератор
  • Вероятно, блокируется подключение (например, встроенным брандмауэром).

    Кстати, у вас доступность узла почему-то проверяется после попытки подключения к нему. Это же бессмысленно.


    Да, Вы правы. Перенёс проверку, чтобы она стояла перед подключением. Правда, это не помогло. Проверка проходит без проблем, подключение выкидывает ту же ошибку.

    21 июня 2011 г. 11:53
  • Консолью управления подключиться не удаётся, поскольку везде XP. С другого сервера 2008 подключаюсь, но выкидывается ошибка о том, что сервер RPC недоступен. К реестру подключение проходит без проблем.

    Я думаю, что как минимум частично эти проблемы обусловлены встроенным брандмауэром. Ну, Удалённое администрирование (RPC) во входящих не разрешено на обоих серверах, я его не включал. Если я не ошибаюсь, это не должно влиять на работу WMI? Доступ к сети COM+ (входящий трафик DCOM) по 135-му порту включён.

    21 июня 2011 г. 12:02
  • Ха! Я давно подозревал, что я — шляпа, но не до такой же степени...

    Во входящих подключениях были выключены пункты Инструментарий управления WindowsDCOM, и WMI). Включил для локальной подсети, скрипт сразу заработал.


    • Помечено в качестве ответа me4huk 21 июня 2011 г. 12:34
    21 июня 2011 г. 12:09