Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / Вопрос по Scheduler / 23 сообщений из 23, страница 1 из 1
19.11.2009, 16:34:23
    #36320239
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Я хочу чтобы у меня время от времени запускался скрипт. Скрипт делает определенные действия, в том числе и запускает телнет, логинится, выполняет команду и выходит с него. Проблема в том, что планировщик отлично справляется с задачей, скрипт запускается, но не запускается телнет, если ни один пользователь не Log On. Поскольку это обычное состояние компьютера, когда никто не залогиненый, то толку с такого скрипта мало.
В планировщике пробовал запускать в том числе и от пользователя NT AUTHORY\System

Подскажите как можно обойти эту проблему?
...
Рейтинг: 0 / 0
19.11.2009, 17:18:17
    #36320442
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Не юзать telnet, юзать чо другое, например, WMI.
...
Рейтинг: 0 / 0
19.11.2009, 17:39:28
    #36320512
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
aleks2,

не подскажите случайно как для решения моей задачи можно обойти использование телнета? Я в телнете просто логинюсь и выполняю команду reboot.
...
Рейтинг: 0 / 0
19.11.2009, 18:03:07
    #36320583
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
zarkaleks2,

не подскажите случайно как для решения моей задачи можно обойти использование телнета? Я в телнете просто логинюсь и выполняю команду reboot.
А от самого себя запускать не пробовал ...
...
Рейтинг: 0 / 0
19.11.2009, 18:49:35
    #36320694
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Sergey Orlov,

Пробовал. Если в этот момент залогиненый - то работает. Если сделал Log off - то выполняется в скрипте все кроме запуска телнета ну и соответственно действий в нем.
...
Рейтинг: 0 / 0
19.11.2009, 19:12:22
    #36320748
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
zarkaleks2,

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

О, блин, шире надо смотреть - на telnet свет клином не сошелся.

>DoRestart.vbs "computername"

DoRestart.vbs===============
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
' use "." for local computer
' Use "PowerOff_Force" for a forced poweroff

Set oArgs = WScript.Arguments
ArgNum =  0 
While (ArgNum < oArgs.Count)
 WScript.Echo ArgNum & ". " & oArgs(ArgNum)
 ShutDown oArgs(ArgNum), "reboot"
 ArgNum = ArgNum +  1 
Wend

Sub ShutDown(sNode, sAction)

  Const EWX_LOGOFF =  0 
  Const EWX_SHUTDOWN =  1 
  Const EWX_REBOOT =  2 
  Const EWX_FORCE =  4 
  Const EWX_POWEROFF =  8 

  Set oWMI = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate,(Shutdown)}!\\" _
     & sNode & "\root\cimv2")

  Set colOperatingSystems = oWMI.ExecQuery _
     ("Select * from Win32_OperatingSystem")
  For Each obj in colOperatingSystems
    Set oOS = obj :  Exit For
  Next

  sAction = LCase(sAction)

  Select Case sAction
    Case "logoff"
      iCmd = EWX_LOGOFF
    Case "logoff_force"
      iCmd = EWX_LOGOFF + EWX_FORCE
    Case "shutdown"
      iCmd = EWX_SHUTDOWN
    Case "shutdown_force"
      iCmd = EWX_SHUTDOWN + EWX_FORCE
    Case "reboot"
      iCmd = EWX_REBOOT
    Case "reboot_force"
      iCmd = EWX_REBOOT + EWX_FORCE
    Case "poweroff"
      iCmd = EWX_POWEROFF
    Case "poweroff_force"
      iCmd = EWX_POWEROFF + EWX_FORCE
    Case Else
      ' Default value
      iCmd = EWX_POWEROFF
  End Select

  oOS.Win32shutdown iCmd

End Sub
=============

Ну... поуниверсальнее вариант

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
' RunProgram.vbs - Written by Bill Stewart (bill.stewart@frenchmortuary.com)
'
' Uses WMI to run a program on the local or a remote computer. It can also wait
' for the program to finish and optionally display an elapsed time. For
' security reasons, running a program on a remote computer always executes in a
' hidden window on Windows  2000  SP3 and later.
'
' Limitations:
'
' * A program started on a remote computer will not have network access.
' * The /wait option imposes some amount of processor overhead because it
'   repeatedly executes a WMI query to determine if the process exists.
' * Embedding double quotes in the command line is awkward because the WSH
'   runtime doesn't provide an escape mechanism (like \" to represent ", etc.)
'   As a workaround, the script uses VBScript's Unescape() function, so you
'   can type % 22  (hex  22  = dec  34  = " character). Naturally, this won't work
'   if the command line actually contains %xx sequences, but this should be
'   pretty rare.
'
' Version history:
' * 1.0: Initial version.

Option Explicit

Const SCRIPT_NAME = "RunProgram.vbs"

' This constant defines the number of mulliseconds
' to wait between each WMI query when using /wait
Const PROCESS_CHECK_INTERVAL = 500

Main

' Displays the script's usage message
Sub ShowUsage()
  WScript.Echo "Runs a program on the local or a remote computer." & vbNewLine _
    & vbNewLine _
    & "Usage: " & SCRIPT_NAME & " ""<command>"" [/startin:<path>] [/window:<n>]" & vbNewLine _
    & "     [/computer:<computer> [/username:<username>] [/password:<password>]]" & vbNewLine _
    & "     [/wait [/elapsed]]" & vbNewLine _
    & vbNewLine _
    & "<command>: The command line to run (must start with an executable)." & vbNewLine _
    & "/startin: Sets the starting directory for the program." & vbNewLine _
    & "/window: Number that sets the program's initial window state. (Note: for" & vbNewLine _
    & "     security reasons, a program run on a remote computer always starts in a" & vbNewLine _
    & "     hidden window on Windows 2000 SP3 and later.)" & vbNewLine _
    & "/computer: The computer on which to run the program." & vbNewLine _
    & "/username: Connects with the specified username (requires /computer)." & vbNewLine _
    & "/password: Use the specified password (requires /computer)." & vbNewLine _
    & "/wait: Waits for the program to end." & vbNewLine _
    & "/elapsed: Displays the program's elapsed time (requires /wait)." & vbNewLine _
    & vbNewLine _
    & "Enclose the command line in double-quotes (""). To embed double quotes in the"  & vbNewLine _
    & "command line, use the string ""% 22 ""." & vbNewLine _
    & vbNewLine _
    & "Example: " & SCRIPT_NAME & " ""cmd /c dir %22C:\Program Files% 22  > C:\List.txt"""

  WScript.Quit 0
End Sub

' Returns the script host (cscript.exe or wscript.exe) in lowercase
Function ScriptHost()
  ScriptHost = LCase(Mid(WScript.FullName, Len(WScript.Path) + 2))
End Function

' Displays the elapsed time in hour(s), minute(s), and second(s) based
' on the Secs parameter
Function GetElapsed(ByVal Secs)
   Dim Result, Hrs, Mins

  Result = ""

  Hrs = Secs \ 3600
  If Hrs > 0 Then
    Result = CStr(Hrs) & " hour(s), "
    Secs = Secs - (3600 * Hrs)
  End If

  Mins = Secs \ 60
  If Mins > 0 Then
    Result = Result & CStr(Mins) & " minute(s), "
    Secs = Secs - (60 * Mins)
  End If

  GetElapsed = Result & CStr(Secs) & " second(s)"
End Function

' Main subroutine
Sub Main()
  Dim Args
  Dim Command, StartIn, Computer, UserName, Password
  Dim Wait, Elapsed
  Dim ShowWindow, Result
  Dim StartTime, EndTime
  Dim Output, TimeInfo
  Dim WMIRun

  Set Args = WScript.Arguments

  ' If there are no unnamed arguments, or if the /? argument
  ' is present, show the usage message
  If (Args.Unnamed.Count = 0) Or Args.Named.Exists("?") Then _
    ShowUsage

  ' CALLOUT A
  Command = Unescape(Args.Unnamed(0))
  ' END CALLOUT A

  StartIn = Args.Named("startin")

  ShowWindow = Args.Named("window")
  If Not IsNumeric(ShowWindow) Then ShowUsage
  If (ShowWindow < 0) Or (ShowWindow > 65535) Then ShowUsage

  Computer = Args.Named("computer")
  UserName = Args.Named("username")
  Password = Args.Named("password")

  Wait = Args.Named.Exists("wait")
  Elapsed = Args.Named.Exists("elapsed")

  ' Create instance of class
  ' CALLOUT B
  Set WMIRun = New WMIExec
  ' END CALLOUT B

  Result = WMIRun.ConnectServer(Computer, UserName, Password)
  If Result <> 0 Then
    WScript.Echo "Error 0x" & Hex(Result) & " connecting to '" _
      & Computer & "'"
    WScript.Quit Result
  End If

  If Elapsed Then StartTime = Now()

  Result = WMIRun.RunProgram(Command, StartIn, ShowWindow)
  If Result <> 0 Then
    WScript.Echo "Error 0x" & Hex(Result) & " starting '" _
      & Command & "'"
    WScript.Quit Result
  End If

  ' Output initial status message
  WScript.Echo WMIRun.Status

  If Wait Then
    ' Suspend script while process is running
    Do While WMIRun.ProcessExists()
      WScript.Sleep PROCESS_CHECK_INTERVAL
    Loop
    If Elapsed Then
      EndTime = Now()
      TimeInfo = "Started: " & CStr(StartTime) & vbNewLine _
        & "Ended: " & CStr(EndTime) & vbNewLine _
        & "Elapsed: " & GetElapsed(DateDiff("s", StartTime, EndTime))
      ' Output full status if running from wscript.exe
      If ScriptHost() = "wscript.exe" Then
        Output = WMIRun.Status & vbNewLine & TimeInfo
      Else
        Output = TimeInfo
      End If
      WScript.Echo Output
    End If
  End If
End Sub

' WMIExec class definition
Class WMIExec
  ' The c_ prefix denotes variables global to the class
  Private c_SWbemServices
  Private c_Server, c_Command, c_StartIn
  Private c_ProcID

  ' Connects to the specified computer; returns 0 for success
  Public Function ConnectServer(ByVal Server, ByVal User, _
    ByVal Password)
    Dim SWbemLocator

    ' Update the class variable
    c_Server = Server

    ' Assume the local computer if not specified
    If c_Server = "" Then c_Server = "."

    ' Ignore user and password if connecting
    ' to the local computer
    If c_Server = "." Then
      User = ""
      Password = ""
    End If

    Set SWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    SWbemLocator.Security_.ImpersonationLevel = 3  ' impersonate

    On Error Resume Next
    Set c_SWbemServices = SWbemLocator.ConnectServer(c_Server, _
      "root/cimv2", User, Password)
    ConnectServer = Err.Number
  End Function

  ' Run the specified command line, starting in the specified
  ' directory, with the specified initial window state; returns
  ' 0 for success
  Public Function RunProgram(ByVal Command, ByVal StartIn, _
    ByVal ShowWindow)
    Dim Startup, Process

    ' Update the class variables
    c_Command = Command
    c_StartIn = StartIn

    ' Create a Win32_ProcessStartup object and configure
    ' its ShowWindow property
    Set Startup = _
      c_SWbemServices.Get("Win32_ProcessStartup").SpawnInstance_()
    Startup.ShowWindow = ShowWindow

    Set Process = c_SWbemServices.Get("Win32_Process")
    RunProgram = Process.Create(c_Command, c_StartIn, Startup, c_ProcID)
  End Function

  ' Returns True if the process exists
  Public Function ProcessExists()
    ProcessExists = c_SWbemServices.ExecQuery("SELECT ProcessID FROM " _
      & "Win32_Process WHERE ProcessID=" & c_ProcID).Count > 0
  End Function

  ' Returns a status message using the class variables
  Public Function Status()
    Dim Server, StartIn

    If c_Server = "." Then Server = "(LocalSystem)"
    If c_StartIn = "" Then StartIn = "(Default)" Else StartIn = c_StartIn

    Status = "Computer: " & Server & vbNewLine _
      & "Command line: " & c_Command & vbNewLine _
      & "Starting directory: " & StartIn & vbNewLine _
      & "Process ID: " & CStr(c_ProcID)
  End Function
End Class
...
Рейтинг: 0 / 0
19.11.2009, 20:08:35
    #36320837
Biz©
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
shutdown /?
...
Рейтинг: 0 / 0
20.11.2009, 16:12:38
    #36322789
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Спасибо за советы.
Я сразу не написал, но я через telnet делаю reboot модему HUAWEI. На нем стоит какая-то обрезанная версия линукса. Сделать так как вы пишите не получается.
...
Рейтинг: 0 / 0
21.11.2009, 23:19:56
    #36324120
Flying-home
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Хотелось бы увидеть результат этого "не запускается".
В логах есть что-нибудь?
>>log.txt в скрипте что дает?
...
Рейтинг: 0 / 0
23.11.2009, 11:38:38
    #36325353
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Flying-home,

скрипт выполняется, но не работает вот эта его часть:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
rem REBOOT modem
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.0.1" ' It is IP of modem
WScript.Sleep  1000 
oShell.SendKeys "login" & chr( 13 )
WScript.Sleep  1000 
oShell.SendKeys "password" & chr( 13 )
WScript.Sleep  1000 
oShell.SendKeys "reboot" & chr( 13 )
...
Рейтинг: 0 / 0
23.11.2009, 17:32:08
    #36326564
Flying-home
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
zark,

Ну, обработчик ощибок надо поставить перед
Код: plaintext
oShell.Run "telnet.exe 192.168.0.1" ' It is IP of modem
и глянуть, что за ошибка. Что-то типа OnError трам-пам -пам
...
Рейтинг: 0 / 0
24.11.2009, 09:15:49
    #36327452
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
zarkFlying-home,

скрипт выполняется, но не работает вот эта его часть:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
rem REBOOT modem
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.0.1" ' It is IP of modem
WScript.Sleep  1000 
oShell.SendKeys "login" & chr( 13 )
WScript.Sleep  1000 
oShell.SendKeys "password" & chr( 13 )
WScript.Sleep  1000 
oShell.SendKeys "reboot" & chr( 13 )


Чудо в перьях... аднако!

1. ляпаешь cmd.txt
login
password
reboot
exit
------------
2.
oShell.Run "telnet.exe -f log.txt 192.168.0.1 <cmd.txt"

3. Остальное повесь на стенку.
...
Рейтинг: 0 / 0
24.11.2009, 11:56:02
    #36327952
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
aleks2,

Сделал так как вы сказали, но ничего не получилось - мигнуло окно телнета и пропало. В логах ничего не было
...
Рейтинг: 0 / 0
24.11.2009, 11:58:22
    #36327961
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Ты сначала запусти командный процессор, а не напрямую к телнету.
Код: plaintext
RUN cmd
--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
24.11.2009, 16:16:30
    #36328850
Flying-home
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
aleks2zarkFlying-home,

скрипт выполняется, но не работает вот эта его часть:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
rem REBOOT modem
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.0.1" ' It is IP of modem
WScript.Sleep  1000 
oShell.SendKeys "login" & chr( 13 )
WScript.Sleep  1000 
oShell.SendKeys "password" & chr( 13 )
WScript.Sleep  1000 
oShell.SendKeys "reboot" & chr( 13 )


Чудо в перьях... аднако!

1. ляпаешь cmd.txt
login
password
reboot
exit
------------
2.
oShell.Run "telnet.exe -f log.txt 192.168.0.1 <cmd.txt"

3. Остальное повесь на стенку.

Аднака, ТС говорит, что у него так работает, если кто-то залогинен.
Кстати, ТС, а все равно кто залогинен?
...
Рейтинг: 0 / 0
25.11.2009, 13:16:12
    #36330706
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Flying-home,

да, абсолютно все-равно кто залогинен.

Кроме этого, что-то не получается передать команды с файла с помощью "...<cmd.txt". В чем может быть причина?
Не получается даже если я с командной строки пишу
Код: plaintext
telnet.exe -f log.txt  192 . 168 . 0 . 1  <cmd.txt
...
Рейтинг: 0 / 0
25.11.2009, 16:13:43
    #36331329
Flying-home
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
zarkFlying-home,
да, абсолютно все-равно кто залогинен.

надо сделать так, как я предложил и результат сюда
zark
Кроме этого, что-то не получается передать команды с файла с помощью "...<cmd.txt". В чем может быть причина?
Не получается даже если я с командной строки пишу
Код: plaintext
telnet.exe -f log.txt  192 . 168 . 0 . 1  <cmd.txt

А тут просто справка по telnet
...
Рейтинг: 0 / 0
25.11.2009, 17:45:56
    #36331729
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Flying-home,

если бы я нашел ответ в справке, то на форуме не писал бы...

Когда я выполняю в командной строке (не в скрипте)
Код: plaintext
telnet.exe -f log.txt  192 . 168 . 0 . 1  <cmd.txt
то лишь на мгновение моргает окно терминала и все... Я так понимаю,окно должно оставаться (команду exit естественно я не писал)
...
Рейтинг: 0 / 0
25.11.2009, 20:26:36
    #36332071
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Ты читаешь, что тебе пишут?
авторТы сначала запусти командный процессор, а не напрямую к телнету.

RUN cmd

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
25.11.2009, 21:12:32
    #36332127
Flying-home
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Anatoly PodgoretskyТы читаешь, что тебе пишут?
авторТы сначала запусти командный процессор, а не напрямую к телнету.

RUN cmd

--
http://www.podgoretsky.com
Точна.
А где справку по телнету искал?
...
Рейтинг: 0 / 0
25.11.2009, 21:14:45
    #36332128
Flying-home
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
можно по буквам:
Пуск -> Выполнить -> cmd
а уже потом команду.
...
Рейтинг: 0 / 0
30.11.2009, 12:03:17
    #36338547
zark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Flying-home, Anatoly Podgoretsky,

Пишу по буквам как делаю:
1. Пуск -> Выполнить -> cmd
2. Перемещаюсь в папку где находится скрипт a) "cd D:\TEST\vbs\", б) "d:"
3. Выполняю: "telnet.exe -f log.txt 192.168.0.1 < cmd.txt"

Содержимое файла cmd.txt:
Код: plaintext
1.
2.
3.
login
password
reboot

Результат таких действий: НИКАКОГО .
Файл log.txt ничего не содержит. Reboot не произошел.

Использованная справка по телнету:
1. http://windows.microsoft.com/ru-RU/windows-vista/Telnet-commands
2. telnet /h
...
Рейтинг: 0 / 0
30.11.2009, 12:17:01
    #36338587
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Scheduler
Вызов не соответствует справке

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / Вопрос по Scheduler / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]