none
Удаленный запуск процесса RRS feed

  • Вопрос

  • что за проблема ? 

    вот мой скрипт, хочу удаленно запустить скрипт

     

    strComputer ="admin2"
      strCommand = "wscript c:\test.vbs"
      Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
      Set objStartup = objWMIService.Get("Win32_ProcessStartup")
      Set objConfig = objStartup.SpawnInstance_
      objConfig.ShowWindow = 1
      Set objProcess = objWMIService.Get("Win32_Process")

    i = objProcess.Create (strCommand, Null, objConfig, intProcessID)

    wscript.echo i

     

     

    если написать имя локального компа все отработает нормально, но удаленного - пишет что процесс удаленно запустился, он даже в taskmanager висит, но больше никак себя не проявляет - тоесть ни окошка не покажет ни msgbox, тоже самое будет если вместо wscript написать что нибудь вроде notepad

    15 июня 2007 г. 15:01

Ответы

  • Предложу обходной вариант. Повесьте ваш скрипт в Scheduled Tasks и выберите расписание, так чтобы скрипт не запускался самомтоятельно. Выберите для запуска скрипта учетную запись пользователя, который логинится на удаленном компьютере. Проверьте, что скрипт запускается по пункту меню Run и выводит требуемое окно на рабочий стол. Далее используйте штатную утилиту schtasks.exe с параметром /Run для удаленного запуска назначенного задания. Либо запускайте назначенное задание с помощью wsh-скрипта.

    Либо используйте более функциональные средства удаленного запуска процессов, например, PsExec.

    16 июня 2007 г. 19:19
    Модератор
  • Я бы повесил backup в шедулер, а уже ему делал бы run через WMI.

     

    Что касается окошек, то они не появятся до тех пор, пока пользователь интерактивной сессии и пользователь задачи не будут одинаковыми.

    18 июня 2007 г. 9:15
    Модератор
  • вот решение одним скриптом:

    (отсрочка максимум 59 сек)

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

     

    <script>

    strComputer ="192.168.1.1"
    strCommand = "wscript.exe c:\ups.vbs"
    Set locator = CreateObject("wbemscripting.swbemlocator")
    set objwmiservice = locator.connectserver(strComputer,"\root\cimv2","user","pass")
    Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")
    tyear = mid(now(),7,4)
    for i = 1 to 31
     datex = i & ".03." & tyear & " 01:00:00"
     datey = i & ".10." & tyear & " 01:00:00"
     if weekday (datex,2)="7" then martdate=datex
     if weekday (datey,2)="7" then octoberdate=datey
    next
    CurrTimePlusOneMin = Replace(Left(Right(dateadd ("n",1,Now()), 8), 5), ":", "")
    if now() > martdate and now() < octoberdate then
     RunTime = "********" & CurrTimePlusOneMin & "00.000000+240"
    else
     RunTime = "********" & CurrTimePlusOneMin & "00.000000+180"
    end if
    Res = objScheduledJob.Create(strCommand, RunTime, False, 2^(Weekday(Now(), 2)-1), 0, True, intJobID)

    <script>

     

    Зацените

    18 июня 2007 г. 10:10

Все ответы

  • суть в том что мне нужно запустить backup на одном сервере по отключению UPS

    этот сервак события от UPS принимает но отрабатывать действия не хочет

     

    поэтому хочу попробовать запустить удаленно скрипт backup-a:

    < мой скрипт >

    workdbFilename="C:\DATA\WORK.GDB"
      tempdbbackup="D:\BACKUP\TEMP.GBK"
      rarbackup="D:\BACKUP\TEMP.RAR"
      Set fso = CreateObject("Scripting.FileSystemObject")
      if fso.fileexists (tempdbbackup) then fso.deletefile (tempdbbackup)
      Set objX = CreateObject("wscript.shell")
      set oExec = objx.exec ("C:\Program Files\InterBase Corp\InterBase\bin\gbak.exe -user user -password pass -b " & workdbFilename & " " & tempdbbackup)
      Do While oExec.Status = 0
         WScript.Sleep 100
      Loop
      set oExec = objx.exec ("C:\Program Files\WinRAR\rar.exe a -ep -ag " & rarbackup & " " & tempdbbackup)

    < мой скрипт >

     

    в результате в списке процессов зависает wscript и больше ничего

    почему на удаленных машинах просто игнорируется objConfig.ShowWindow = 1
      HELP

    16 июня 2007 г. 7:26
  • Проблема, видимо в том, что на локальном и удаленном компьютерах вошли в систему разные пользователи (доменные или локальные). Попробуйте в целях тестирования зайти в систему на обоих компьютерах под одной и той же учетной записью. Появится ли окно приложения (или MsgBox в скрипте) на удаленном компьютере?
    16 июня 2007 г. 9:49
    Модератор
  • пробовал - тоже самое
    16 июня 2007 г. 11:55
  • Предложу обходной вариант. Повесьте ваш скрипт в Scheduled Tasks и выберите расписание, так чтобы скрипт не запускался самомтоятельно. Выберите для запуска скрипта учетную запись пользователя, который логинится на удаленном компьютере. Проверьте, что скрипт запускается по пункту меню Run и выводит требуемое окно на рабочий стол. Далее используйте штатную утилиту schtasks.exe с параметром /Run для удаленного запуска назначенного задания. Либо запускайте назначенное задание с помощью wsh-скрипта.

    Либо используйте более функциональные средства удаленного запуска процессов, например, PsExec.

    16 июня 2007 г. 19:19
    Модератор
  • Я бы повесил backup в шедулер, а уже ему делал бы run через WMI.

     

    Что касается окошек, то они не появятся до тех пор, пока пользователь интерактивной сессии и пользователь задачи не будут одинаковыми.

    18 июня 2007 г. 9:15
    Модератор
  • вот решение одним скриптом:

    (отсрочка максимум 59 сек)

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

     

    <script>

    strComputer ="192.168.1.1"
    strCommand = "wscript.exe c:\ups.vbs"
    Set locator = CreateObject("wbemscripting.swbemlocator")
    set objwmiservice = locator.connectserver(strComputer,"\root\cimv2","user","pass")
    Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")
    tyear = mid(now(),7,4)
    for i = 1 to 31
     datex = i & ".03." & tyear & " 01:00:00"
     datey = i & ".10." & tyear & " 01:00:00"
     if weekday (datex,2)="7" then martdate=datex
     if weekday (datey,2)="7" then octoberdate=datey
    next
    CurrTimePlusOneMin = Replace(Left(Right(dateadd ("n",1,Now()), 8), 5), ":", "")
    if now() > martdate and now() < octoberdate then
     RunTime = "********" & CurrTimePlusOneMin & "00.000000+240"
    else
     RunTime = "********" & CurrTimePlusOneMin & "00.000000+180"
    end if
    Res = objScheduledJob.Create(strCommand, RunTime, False, 2^(Weekday(Now(), 2)-1), 0, True, intJobID)

    <script>

     

    Зацените

    18 июня 2007 г. 10:10
  • Через Task Sheduler  громоздко и неудобно. Плюс, если удаленно запускается скрипт, а через него еще какая-нибудь задача, то возникают проблемы с интерактивным отображением окна задачи на удаленной машине. Объектная модель Win32_SheduleJob является альтернативой только AT команды. Для SCHTASKS объектной модели нет (или я уже плохо искал). Более красиво и аккуратно через PsExec 
    22 июня 2018 г. 6:21