Войти

Показать полную графическую версию : Удалённое выполнение сценариев


Antichrist
06-10-2006, 04:18
Есть домен под 2003 ,все клиенты XP ,есть необходимость удалённо запускать wsh сценарии в любой момент времени и желательно с правами администратора ,для примера такой сценарий :
Set objSysInfo = CreateObject("ADSystemInfo")
Set objComputer = GetObject _
("LDAP://" & objSysInfo.ComputerName)
Set CurrentUser = GetObject("LDAP://" & objSysInfo.UserName)
objComputer.Put "Description" , CurrentUser.DisplayName
objComputer.SetInfo

Пишет в описании компа в AD имя пользователя ,но сам сценарий не важен ,их очень много для различных целей.
Запуск из логон скрипта неподходит, вопервых потому как запускается только в момент самого логона ,во вторых с правами пользователя ,запуск по шедулеру тоже ,неудобно...
pcexec тоже не то ,процессы удалённо и так запускать умею через WMI ,не то.

Нашол такой код в репозитории микрософта используется так Script_name remote_comp

On Error Resume Next

If Wscript.Arguments.Count = 0 Then
Wscript.Echo "You must enter the computer name when starting this script."
Wscript.Quit
End If

strComputer = Wscript.Arguments.Item(0)

Set objShell = CreateObject("WScript.Shell")
strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & ""
Set objExecObject = objShell.Exec(strCommand)

Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadAll()
If Instr(strText, "Reply") > 0 Then

' =====================================================================
' Insert your code here
' =====================================================================

Set objComputer = GetObject("WinNT://" & strComputer & "")
objComputer.Filter = Array("User")
For Each objUser in objComputer
Wscript.Echo objUser.Name
Next

' =====================================================================
' End
' =====================================================================

Else
Wscript.Echo strComputer & " could not be reached."
End If
Loop

всё бы ничего ,только выполняется он всё равно на моей локальной машине ,даже ярлычок сценарием создать удалённо не получается ,после отработки сценария оказывается на моей локальной машине

Вопрос как осущевствить запуск сценария на удалённой машине с правами администратора ?

Vasosel
11-10-2006, 12:15
Приведенный скрипт делает следующее:

получает имя компьютера как аргумент командной строки;
пытается его пингануть 3 раза;
если в выводе программы ping (STDOUT) находит строку Reply, то получает список пользователей этого компьютера и выводит их на экран(вот тут пес знает, что именно вернет Array("User"), надо тестить)

Т.е. на удаленной машине он и не должен выполняться.

Чтобы выполнить скрипт на удаленной машине с правами локального администратора, необходимо добавить этот скрипт в автозагрузку (конфигурация компьютера)
Чтобы выполнить скрипт на удаленной машине с правами пользователя, необходимо добавить этот скрипт в логон-скрипты (конфигурация пользователя)
Если необходимо выполнять скрипт в процессе работы, можно покопаться в сторону RPC, мне в руки как-то попадалась утилита, позволяющая выполнить команду/запустить программу на удаленной машине.

Только зачем это нужно? если выполнить приведенный аффтором сценарий

Set objSysInfo = CreateObject("ADSystemInfo")
Set objComputer = GetObject _
("LDAP://" & objSysInfo.ComputerName)
Set CurrentUser = GetObject("LDAP://" & objSysInfo.UserName)
objComputer.Put "Description" , CurrentUser.DisplayName
objComputer.SetInfo

с правами администратора, то в Description передастся имя администратора, а не пользователя, который под ним залогинен.

Antichrist
12-10-2006, 03:56
По поводу последнего скрипта уже и так понятно ,он впринципе работать не будет от пользователя ,на него я уже зибил.
Через RPC не полуится ,через него насколько я понял только процессы можно запускать
таким вот образом
Const SW_NORMAL = 1
strComputer = "administrator"
strCommand = "c:\test.vbs"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

' Configure the Notepad process to show a window
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = SW_NORMAL

' Create Notepad process
Set objProcess = objWMIService.Get("Win32_Process")
intReturn = objProcess.Create _
(strCommand, Null, objConfig, intProcessID)
If intReturn <> 0 Then
Wscript.Echo "Process could not be created." & _
vbNewLine & "Command line: " & strCommand & _
vbNewLine & "Return value: " & intReturn
Else
Wscript.Echo "Process created." & _
vbNewLine & "Command line: " & strCommand & _
vbNewLine & "Process ID: " & intProcessID
End If

Работает отлично ,но ограничение есть в том что пользовательне может взаимодействовать с процессом ,можно конечно попробовать wscript с араметром запускать ,но это не совсем то.
Поидее вот таким скриптом можно запустить любой сценарий на удалённой машине в процессе работы
strRemoteComputer = "target_comp"
strWorkerScript = "mount.vbs"
Set objWshController = WScript.CreateObject("WshController")
Set objRemoteScript = _
objWshController.CreateScript(strWorkerScript, strRemoteComputer)
objRemoteScript.Execute

Do While Not objRemoteScript.Status = 2
Wscript.Sleep(100)
Wscript.Echo "Remote script not yet complete."
Loop

Запускаю на target_comp скрипт mount.vbs в котором содержится просто
Set WshNetwork = CreateObject("WScript.Network")
'Монтируем Обмен на серваке как диск Y:
WshNetwork.MapNetworkDrive "x:", "\\server\install"

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

Vadikan
12-10-2006, 06:01
А почему не пользуемся тегом code?
[hr]
Перенесено обратно в NT. Все-таки вопрос связан с администрированием клиентов, а это тема NT-форума, несмотря на тип клиентской ОС.

Antichrist
12-10-2006, 06:06
сорри ,запамятовал исправлюсь ,почему перенесли тоже не в курсе ,думаю это как раз админам нужно ,а большинство обитает в 2k3




© OSzone.net 2001-2012