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

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

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

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

Пробовал. Если в этот момент залогиненый - то работает. Если сделал Log off - то выполняется в скрипте все кроме запуска телнета ну и соответственно действий в нем.
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36320748
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по Scheduler
    #36320837
Biz©
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shutdown /?
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36322789
zark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы.
Я сразу не написал, но я через telnet делаю reboot модему HUAWEI. На нем стоит какая-то обрезанная версия линукса. Сделать так как вы пишите не получается.
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36324120
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы увидеть результат этого "не запускается".
В логах есть что-нибудь?
>>log.txt в скрипте что дает?
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36325353
zark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по Scheduler
    #36326564
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zark,

Ну, обработчик ощибок надо поставить перед
Код: plaintext
oShell.Run "telnet.exe 192.168.0.1" ' It is IP of modem
и глянуть, что за ошибка. Что-то типа OnError трам-пам -пам
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36327452
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по Scheduler
    #36327952
zark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2,

Сделал так как вы сказали, но ничего не получилось - мигнуло окно телнета и пропало. В логах ничего не было
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36327961
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты сначала запусти командный процессор, а не напрямую к телнету.
Код: plaintext
RUN cmd
--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36328850
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по Scheduler
    #36330706
zark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,

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

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

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

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

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

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

RUN cmd

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

RUN cmd

--
http://www.podgoretsky.com
Точна.
А где справку по телнету искал?
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36332128
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно по буквам:
Пуск -> Выполнить -> cmd
а уже потом команду.
...
Рейтинг: 0 / 0
Вопрос по Scheduler
    #36338547
zark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по Scheduler
    #36338587
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызов не соответствует справке

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


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