WMI Win32_Process.Create завершается ошибкой с недостаточными привилегиями - PullRequest
1 голос
/ 20 апреля 2009

Я пытаюсь запустить простую утилиту cmd на удаленном сервере Windows из vbscript, вызвав класс Win32_Process , например:

serverIP = "10.0.0.3"
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & serverIP & "\root\cimv2:Win32_Process")
RunCommand = "cmd.exe /c echo hello >c:\hello.txt"
wscript.echo RunCommand
intReturn = oWMI.Create(RunCommand, Null, Null, intProcessID)  
wscript.echo intReturn
Select Case intReturn
        Case 0 Wscript.Echo "Successful"
        Case 2 Wscript.Echo "Access denied"
        Case 3 Wscript.Echo "Insufficient privilege"
        Case 8 Wscript.Echo "Unknown failure"
        Case 9 Wscript.Echo "Path not found"
        Case 21 Wscript.Echo "Invalid parameter"
        Case Else Wscript.Echo "Unable to execute for unknown reason"
End Select

Это всегда дает сбой при недостаточных привилегиях (код возврата 3).

Кто-нибудь может увидеть, что я делаю не так? Сценарий запускается из сеанса cmd, вызываемого администратором домена, поэтому он должен работать нормально, если в безопасности WMI нет чего-то, что я не до конца понимаю.

Вероятно, найдутся люди, которые предложат PSEXEC. Я знаю об этом и могу вернуться к этому. Но это похоже на решаемую проблему как таковую, и я бы не стал создавать зависимости для внешних исполняемых файлов для этого сценария.

Я упомяну несколько вещей, которые я пробовал.

  • Этот парень говорит, что может быть проблема, если профиль не загружен. У меня та же проблема, даже если вызывающий пользователь (администратор домена) вошел в обе системы.
  • В этой ветке Ричард Мюллер отмечает, что нужно указать и impersonationlevel = impersonate, и authenticationlevel = Pkt. Я попробовал это. Все еще не идти.
  • На этой странице кажется, что нужно указать NT права , необходимые внутри моникера. Я попытался указать SeInteractiveLogonRight, SeNetworkLogonRight, SeBackupPrivilege, SeRestorePrivilege, SeDebugPrivilege и SeChangeNotifyPrivilege. Ничего не сработало.

Обычная тема, которую я заметил при поиске в Google, заключается в том, что люди видят эту проблему на некоторых целевых компьютерах, но не на других. Таким образом, мне кажется, что в сущности не хватает полного разрушения безопасности, необходимого для выполнения этой задачи. Леденец будет с благодарностью отправлен тому, кто сможет обеспечить такую ​​поломку окончательно!

Напрасно надеясь, что это увеличит количество зрителей, я собираюсь добавить здесь тег .net, поскольку пользователи .net часто имеют дело с теми же проблемами WMI и могут иметь представление.

Awww. Удар, это не станет перекати не так ли?

Ответы [ 4 ]

2 голосов
/ 02 июля 2010

У меня была похожая проблема. Предложение от http://social.technet.microsoft.com/Forums/en-US/winserverManagement/thread/305557c4-df94-4d92-85bf-a049c83f120c помог мне. Кратко: убедитесь, что учетные записи LOCAL SERVICE и NETWORK SERVICE предоставлены для «замены токена уровня процесса» (SeAssignPrimaryTokenPrivilege).

1 голос
/ 19 августа 2009

На этой странице кажется, что необходимо указать права NT, необходимые для этого имени. Я попытался указать SeInteractiveLogonRight, SeNetworkLogonRight, SeBackupPrivilege, SeRestorePrivilege, SeDebugPrivilege и SeChangeNotifyPrivilege. Ничего не сработало.

Обратите внимание, что если вы пытались использовать строки привилегий, перечисленные выше (прямо из прав NT), это не сработает. Вы должны использовать привилегии моникера, показанные в таблице 6.8 Параметры безопасности WMI

(Но, если вы уже являетесь администратором домена и просто пытаетесь использовать cmd.exe echo> file, это почти не проблема)

0 голосов
/ 02 июня 2009

Ознакомьтесь с этой подробной страницей MS Technet, взятой из книги «Расширенный VBScript для администраторов Microsoft Windows» В частности, это «Глава 6: Удаленные сценарии» Доном Джонсом и Джеффри Хиксом "и содержит подробную информацию о том, как правильно настроить целевое устройство для удаленных сценариев.

Также посмотрите c: \ winnt \ system32 \ WBEM \ logs \ wmiprov.txt Уверен, вы видите что-то вроде этого:

(Mon Jun 01 16:57:19 2009.2x) : ***************************************
(Mon Jun 01 16:57:19 2009.2x) : Could not get pointer to binary resource for file:
(Mon Jun 01 16:57:19 2009.2x) : C:\WINNT\system32\DRIVERS\wmiacpi.sys[MofResource](Mon Jun 01 16:57:19 2009.2x) : 
(Mon Jun 01 16:57:19 2009.2x) : ***************************************
0 голосов
/ 30 апреля 2009

Вы найдете больше информации об ошибке в журнале событий на стороне сервера. Это поможет диагностировать ошибку прав доступа или попытаться контролировать доступ с помощью FileMon .

...