Лучший отвечающий
Выключение компьютеров

Вопрос
-
Помогите, пожалуйста, разобраться. Запутался. Написал простенький скрипт для выключения компьютеров, список которых берется из текстового файла (в каждой строке - имя компьютера).
On Error Resume Next strUsername="Shutdown" strPasswd="P@ssw0rd" strComputerList="ShutdownList.txt" strScriptPath = WScript.ScriptFullName strScriptPath = left(strScriptPath,instrrev(strScriptPath,"\")) strComputerList=strScriptPath & strComputerList Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile(strComputerList, ForReading) Do Until objTextFile.AtEndOfStream strNextLine = objTextFile.Readline ShutdownSystem strNextLine Loop WScript.Quit 0 Sub ShutdownSystem(ComputerName) Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer(ComputerName, "root\cimv2", strUsername, strPasswd) objSWbemServices.Security_.ImpersonationLevel = 3 Set OpSysSet = objSWbemServices.ExecQuery("select * from Win32_OperatingSystem" & " where Primary=true") For each OpSys in OpSysSet opSys.Shutdown() Next End Sub
Завел указанную учетную запись Shutdown на всех нужных компьютерах и дал ей права "Shut down the system" и "Force shutdown from a remote system" (в группу администраторов данная учетная запись не входит). При запуске скрипта выдается ошибка "SWbemLocator: Отказано в доступе."
Если в скрипте задать учетную запись с административными правами, то всё работает. Как я понимаю, не хватает прав для доступа к WMI или DCOM. Но каких?
10 июня 2011 г. 9:29
Ответы
Все ответы
-
-
Eugene Alekseev, попробуйте после оператора
objSWbemServices.Security_.ImpersonationLevel = 3
добавить операторobjSWbemServices.Security_.Privileges.Add 23
10 июня 2011 г. 13:29 -
Вы всё ещё не используете WMI?
"Администраторам Windows хорошо известны настройки безопасности системы и их раздел «User Right Assignments» (привилегии пользователей), доступные в консоли безопасности системы и групповых политиках домена. Ряд действий с операционной системой можно проделать только при наличии у пользователя или группы, куда он входит, той или иной привилегии. К таким действиям относятся, например, перезагрузка системы (завершение ее работы), восстановление состояния системы из резервной копии или смена системного времени.
Поскольку с использованием WMI можно выполнить все эти действия, разработчики WMI заложили дополнительный механизм защиты. Смысл его в следующем: даже если учетная запись пользователя обладает необходимыми для действия с системой привилегиями, он все равно не сможет выполнить это действие, пока явно не активирует эту привилегию перед выполнением действия. В частности, если администратор запустит скрипт WMI, запрашивающий перезагрузку системы, этого все равно не произойдет, пока в скрипте не будет явно активирована эта привилегия."
my blog: http://shserg.ru/10 июня 2011 г. 14:39 -
Всем спасибо! Во вторник испробую ваши рекомендации.
Так как я не программист, мне немного не понятно, разве штатная команда shutdown и скрипты использующие WMI не используют в конце-концов одни и теже системные вызовы и библиотеки?
P.S: У меня уже складывается впечатление, что для избежения раздачи излишних прав в моем случае правильней создать батник с использование команды shutdown, запланировать его в планировщике от имени аккаунта "Shutdown" (см. первое сообщение) и стартовать задание вручную по мере необходимости.
10 июня 2011 г. 15:55 -
>P.S: У меня уже складывается впечатление, что для избежения раздачи излишних прав в моем случае правильней создать батник с использование команды shutdown, запланировать его в планировщике от имени аккаунта "Shutdown" (см. первое сообщение) и стартовать задание вручную по мере необходимости.
Никаких излишних прав вы не выдадите. Просто перед тем, как выполнить привилегированное действие, вам необходимо в скрипте явно обозначить свое желание выполнить это привелигированное действие (своего рода защита от дурака, точно так же в большинстве языков программирования вы обязаны объявить переменную перед ее использованием).
Если же вы таки решите использовать команнду shutdown, то примите во внимание наличие бага
my blog: http://shserg.ru/11 июня 2011 г. 13:24