Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помощь по: батник для управления сервисами

Ответить
Настройки темы
CMD/BAT - [решено] Помощь по: батник для управления сервисами

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: cobra2029
Дата: 05-04-2011
Описание: добавлен код батника
Изображения
Тип файла: jpg ошибка.JPG
(31.6 Kb, 9 просмотров)
Возникла необходимость мониторинга и запуска сервисов на удалённом PC, для решения данной проблемы был использован батник взятый с этого форума (ссылку к сожалению не смогу указать) автор батника registeruser1


Итак, скопировал я батник изменил то что мне надо было, понятное дело что изменил кодировку, расширение... запустил при выполнение батника вылезла ошибка (скрин прилагается).

вопрос такой: что нужно было прописывать в переменной среде?


P.S.
Если важно: OS - Windows Server2003


код баника:
Код: Выделить весь код
@echo off
echo.
echo *******************************************************************************
@echo.
echo PLEASE WAIT... SCANING SERVICES:
@echo.                        
echo *******************************************************************************
echo.
setlocal enabledelayedexpansion
set server=\\127.0.0.1
ping -n 1  %server:~2% 1>nul 2>nul || ( echo NO RESPOND FROM SERVER, EXITING... & pause & exit )  
title Scanning
set "sernum=100"
for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (
if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scanning %server%: %%b
if /i .%%a equ .DISPLAY_NAME: echo %%b | find /i "Windows" 1>nul && (
echo %%b
set /a sernum += 1
set "_service_!sernum:~1!=!_servicen_!"
set "_serviced_!sernum:~1!=%%b"
)
)
:display
TITLE WELCOME
cls
if errorlevel 0 @echo  
echo.
echo *******************************************************************************
@echo.
echo STARTING/STOPPED SERVICES MENU:
@echo.
echo *******************************************************************************
echo.
for /f "tokens=2,3* delims=_=" %%a in ('set _service_') do ( 
for /f "tokens=4" %%s in ('sc %server% query %%b ^| findstr /r /b /c:" *STATE " ') do ( 
set "_displ_=!_serviced_%%a!                                                " 
echo.%%a !_displ_:~0,58! %%s 
)
) 
echo.   
TITLE WELCOME
set "reply=0" 
set /p reply="Please select number for start/stop and press Enter (0=RESCAN): " 
set "reply=00%reply: =%" 
set "reply=%reply:~-2%" 
if %reply% == 00 goto :display
if not defined _service_%reply% echo Service %reply% not defined & pause & exit 
sc %server% query !_service_%reply%! | findstr /r /b /c:" *STATE " | 1>nul find "RUNNING" && (1>nul sc %server% stop !_service_%reply%! & sc %server% config !_service_%reply%! start= disabled 1>nul 2>&1)||(sc %server% config !_service_%reply%! start= auto 1>nul 2>&1 & 1>nul sc %server% start !_service_%reply%!)
goto :display

Отправлено: 13:51, 05-04-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


cobra2029, используйте лучше WMI для слежения за сервисом посредством WSH или PoSH.

Отправлено: 19:21, 05-04-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, ммм можно поподробнее, и если нетрудно пример.

Отправлено: 10:25, 06-04-2011 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


TechNet Script Center Repository:

Check to See if a Service is Installed and Running
List Service Status
Stop or Start a Service
и, наконец, Monitor Changes in Service Status
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:53, 06-04-2011 | #4


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, спасибо за ссылки очень помогли.



использовав один из скриптов, я получил почти то, что хотел, но появился еще 1 вопрос:
на удалённом компе( назовем его "А") есть пользователь и пароль, на моём рабочем ( "В") логин и пас такие же, но на компе "С", на котором необходимо запускать скрипт, чтобы перезапустить нужный сервис на удалённом компе "А", логин и пас другие.
как мне вбить в скрипт, логин и пас, через которые бы он заходил на серв ("А").
если запустить скрипт на машине "В" то он работает и все классно.
но если его запустить на машине "С" то пишет типа нет доступа.


тест скрипта:

Код: Выделить весь код
Option Explicit 
Dim objWMIService, objItem, objService, objShell 
Dim colListOfServices, Action 
Dim strServiceList, strServiceName, strComputer, strService 
Const TIMEOUT = 2 
 
Set objShell = WScript.CreateObject("WScript.Shell") 
 
'имя компьютера. 
Do  
       strComputer = InputBox  ("Введите  имя компьютера","Computer Name","klon") 
       If strComputer = " " Then 
          WScript.Quit 
       ElseIf strComputer = " " Then 
          MsgBox "You must specify a Computer name",vbOkOnly,"Computer Name Required" 
       End If 
Loop Until strComputer <> " " 
 
'описание  имени сервиса 
Do  
    strService = InputBox  ("Enter the name of the Service to start or stop" &_ 
           vbCrLf & "or a ? for a listing of services" &_ 
           vbCrLf & "Note: The service name is Case Sensitive","Service Name"," ") 'сюда  добавить имя сервиса
       If strService = "" Then 
          WScript.Quit 
       ElseIf strService = " " Then 
        MsgBox "You must specify a Service name",vbOkOnly,"Service Name Required" 
       End If 
    'If a '?' is entered, get a formatted list of Services by (Real) Name and Display Name 
    If strService = "?" Then 
        Set objWMIService = GetObject("winmgmts:" _ 
            & "{impersonationLevel=impersonate}!\\" _ 
            & strComputer & "\root\cimv2") 
        Set colListOfServices = objWMIService.ExecQuery _ 
            ("Select * from Win32_Service ")         
        strServiceList = LeftPad("Service Name", 30, Chr(32)) & vbTab & "Service Display Name" 
        strServiceList = strServiceList & vbCrLf & LeftPad("------------", 30, Chr(32)) & vbTab & "--------------------" 
        For Each objService in colListOfServices 
            strServiceName = objService.name 
            strServiceName = LeftPad(strServiceName, 30, Chr(32)) 
            strServiceList = strServiceList & vbCrLf & strServiceName & vbTab & objService.DisplayName 
        Next         
        Set colListOfServices = nothing 
        Set objWMIService = Nothing  
        WScript.Echo strServiceList 
    End If 
Loop Until strService <> " " And strService <> "?" 
strService = "'" & strService & "'" 
 
'Check the service status, if it is stopped ask to start it 
'if it is running ask to stop it, also if it is an auto startup 
'ask if the user wants to change it to disabled. 
Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" _ 
& strComputer & "\root\cimv2") 
Set colListOfServices = objWMIService.ExecQuery _ 
("Select * from Win32_Service Where Name =" & strService & " ") 
For Each objService in colListOfServices 
    If objService.State = "Running" Then 
        Action = MsgBox("The " & strService & " service is running; do you want to stop it?", vbYesNo, "Stop Service?") 
        If Action = vbYes Then 
            objService.StopService() 
            objShell.Popup "Stop request sent.", TIMEOUT 
            If objService.StartMode = "Auto" Then 
                Action = MsgBox("The " & strService & " service is stopped; do you want to disable it?", vbYesNo, "Disable Service?") 
                If Action = vbYes Then 
                    errReturnCode = objService.Change( , , , , "Disabled")  
                    objShell.Popup "Disable Service request sent.", TIMEOUT 
                End If 
            End If 
        End If 
    ElseIf objService.State = "Stopped" Then 
        If objService.StartMode = "Disabled" Then 
            MsgBox "The " & strService & " service is Disabled and can not be started with this script",vbOkOnly,"Service Disabled" 
        Else 
            Action = MsgBox("The " & strService & " service is stopped; do you want to start it?", vbYesNo,"Start Service?") 
            If Action = vbYes Then 
                objService.StartService() 
                objShell.Popup "Start request sent.", TIMEOUT 
            End If 
        End If 
    Else 
        objShell.Popup "Service state cannot be determined.", TIMEOUT 
    End If 
Next  
 
set objShell = Nothing 
Set objService = Nothing 
Set objItem = Nothing 
Set objWMIService = Nothing 
 
WScript.Quit ' End of WMI script to Start / Stop services 
 
Function LeftPad(strData, intLen, chrPad) 
    'Pads the string strData from the left to length intLen with char chrPad. 
     'If strData length is greater than intLen, returns strData unchanged 
    Dim intPadLen 
    intPadLen = intLen - Len(strData) 
    If intPadLen > 0 Then 
         LeftPad = String(intPadLen, chrPad) & strData 
    Else 
         LeftPad = strData 
    End If 
End Function

Последний раз редактировалось cobra2029, 07-04-2011 в 12:52.


Отправлено: 16:24, 06-04-2011 | #5


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


полазил по форуму решения на вопрос не нашел, подскажите как зделать или ткните носом где можно почитать) (желательно с примером)

Отправлено: 18:37, 06-04-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата cobra2029:
использовав один из скриптов, …»
cobra2029, я с большим трудом воспринимаю написанное без учёта правил грамматики и орфографии русского языка.

Попробуйте использовать вместо моникера (Constructing a Moniker String (Windows)) метод SWbemLocator.ConnectServer:
Цитата:
You cannot specify a password in a WMI moniker string. If you must change the password (strPassword parameter) or the type of authentication (strAuthority parameter) when connecting to WMI, then call SWbemLocator.ConnectServer. Be aware that you can only specify the password and authority in connections to remote computers. Attempting to set these in a script that is running on the local computer results in a error.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:06, 06-04-2011 | #7


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, у меня что то снова не выходит, вроде делаю все как написано, но видимо что то не так, если не трудно исправьте ошибку(или скорее всего ошибки) в коде, и, если можно подробно объясните, что делал не так.

Код: Выделить весь код
Option Explicit 
Dim objWMIService, objItem, objService, objShell, objPassword
Dim colListOfServices, Action 
Dim strServiceList, strServiceName, strComputer, strService, strPassword, strUser
Const TIMEOUT = 2 
 
Set objShell = WScript.CreateObject("WScript.Shell") 
 
'Введите  имя компьютера. 
Do  
       strComputer = InputBox  ("Введите  имя компьютера","Computer Name","djs-klon") 
       If strComputer = " " Then 
          WScript.Quit 
       ElseIf strComputer = " " Then 
          MsgBox "You must specify a Computer name",vbOkOnly,"Computer Name Required" 
       End If 
Loop Until strComputer <> " " 
 
 'PW
 Do
    Set objPassword = CreateObject("ScriptPW.Password")
	Wscript.StdOut.Write "Please enter your password:"
	strPassword = objPassword.GetPassword()
'user
Do
	Wscript.StdOut.Write "Please enter your user name:"
		strUser = Wscript.StdIn.ReadLine 
		
'Enter the Service name. NOTE: Service name is case sensitive! 
Do  
    strService = InputBox  ("Enter the name of the Service to start or stop" &_ 
           vbCrLf & "or a ? for a listing of services" &_ 
           vbCrLf & "Note: The service name is Case Sensitive","Service Name","djs213bv") 'сюда  добавить имя сервиса
       If strService = "" Then 
          WScript.Quit 
       ElseIf strService = " " Then 
        MsgBox "You must specify a Service name",vbOkOnly,"Service Name Required" 
       End If 
    'If a '?' is entered, get a formatted list of Services by (Real) Name and Display Name 
    If strService = "?" Then 

        Set objWMIService = GetObject(SWbemLocator.ConnectServer( _  
strServer, _
strUser, _
strPassword, _
))
         Set colListOfServices = objWMIService.ExecQuery _ 
            ("Select * from Win32_Service ")         
        strServiceList = LeftPad("Service Name", 30, Chr(32)) & vbTab & "Service Display Name" 
        strServiceList = strServiceList & vbCrLf & LeftPad("------------", 30, Chr(32)) & vbTab & "--------------------" 
        For Each objService in colListOfServices 
            strServiceName = objService.name 
            strServiceName = LeftPad(strServiceName, 30, Chr(32)) 
            strServiceList = strServiceList & vbCrLf & strServiceName & vbTab & objService.DisplayName 
        Next         
        Set colListOfServices = nothing 
        Set objWMIService = Nothing  
        WScript.Echo strServiceList 
    End If 
Loop Until strService <> " " And strService <> "?" 
strService = "'" & strService & "'" 
 
'Check the service status, if it is stopped ask to start it 
'if it is running ask to stop it, also if it is an auto startup 
'ask if the user wants to change it to disabled. 
Set objWMIService = GetObject(SWbemLocator.ConnectServer( _
strServer, _
strUser, _
strPassword, _
  )
	) 
       Set colListOfServices = objWMIService.ExecQuery _ 
            ("Select * from Win32_Service ")         
For Each objService in colListOfServices 
    If objService.State = "Running" Then 
        Action = MsgBox("The " & strService & " service is running; do you want to stop it?", vbYesNo, "Stop Service?") 
        If Action = vbYes Then 
            objService.StopService() 
            objShell.Popup "Stop request sent.", TIMEOUT 
            If objService.StartMode = "Auto" Then 
                Action = MsgBox("The " & strService & " service is stopped; do you want to disable it?", vbYesNo, "Disable Service?") 
                If Action = vbYes Then 
                    errReturnCode = objService.Change( , , , , "Disabled")  
                    objShell.Popup "Disable Service request sent.", TIMEOUT 
                End If 
            End If 
        End If 
    ElseIf objService.State = "Stopped" Then 
        If objService.StartMode = "Disabled" Then 
            MsgBox "The " & strService & " service is Disabled and can not be started with this script",vbOkOnly,"Service Disabled" 
        Else 
            Action = MsgBox("The " & strService & " service is stopped; do you want to start it?", vbYesNo,"Start Service?") 
            If Action = vbYes Then 
                objService.StartService() 
                objShell.Popup "Start request sent.", TIMEOUT 
            End If 
        End If 
    Else 
        objShell.Popup "Service state cannot be determined.", TIMEOUT 
    End If 
Next  
 
set objShell = Nothing 
Set objService = Nothing 
Set objItem = Nothing 
Set objWMIService = Nothing 
 
WScript.Quit ' End of WMI script to Start / Stop services 
 
Function LeftPad(strData, intLen, chrPad) 
    'Pads the string strData from the left to length intLen with char chrPad. 
     'If strData length is greater than intLen, returns strData unchanged 
    Dim intPadLen 
    intPadLen = intLen - Len(strData) 
    If intPadLen > 0 Then 
         LeftPad = String(intPadLen, chrPad) & strData 
    Else 
         LeftPad = strData 
    End If 
End Function
еще раз спасибо за помощь.

Последний раз редактировалось cobra2029, 07-04-2011 в 12:53.


Отправлено: 10:37, 07-04-2011 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Как я не могу объяснить Вам, что Вы делаете не так, коль Вы молчите о том, что Вы хотите получить, что делает (или должен делать) Ваш скрипт, и что именно «не выходит»?!

Про грамматику я уже упоминал. Если Вы напишете ответ в том же духе — не обессудьте, я его молча проигнорирую.

Отправлено: 10:58, 07-04-2011 | #9


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


"что должен делать скрипт?"
он должен узнавать какое состояние (запущен или остановлен) у сервисов на удаленном компе (там стоит winserv2000), и по команде пользователя или запустить, или остановить сервис.


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

теперь что не получается:

я использовал скрипт из сообщения 5 (этой темы). С ним все нормально, он работает но удаётся подключиться только с моей машины.
Мне же необходимо чтобы этот скрипт запускался и работал с другой машины.
Как я понимаю, на моей он работает по тому что на сервере ("А" как я уже писал выше), логин и пас точно такие же как и на моей машине ("В"), а вот на машине ("С") логин и пас отличаются.
Мне нужно чтоб скрипт работал именно с машины "С".

добавить логин и пас машины "С" на машину "А" не подходит, в свою очередь нельзя создать пользователя (с логином и пасом как на машине "А") на машине "С".

..."что именно не выходит"?
я прочитал статьи которые Вы мне написали, модифицировал скрипт, но видимо что то сделал не так, скрипт не запускается вообще.



P.S. учёл ваши пожелания по поводу запятых.

Последний раз редактировалось cobra2029, 07-04-2011 в 13:56.


Отправлено: 11:31, 07-04-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помощь по: батник для управления сервисами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Новые элементы панели управления! Нужна помощь! LP92 Автоматическая установка Windows 2000/XP/2003 2 16-07-2010 14:23
CMD/BAT - [решено] батник для управления сервисами registeruser1 Скриптовые языки администрирования Windows 9 07-05-2010 13:24
батник для NTOS admart Лечение систем от вредоносных программ 2 17-10-2008 23:36
Проблема с сервисами CTEPBA Microsoft Windows NT/2000/2003 1 19-01-2006 08:51
батник для выключения win98 mikesip Microsoft Windows 95/98/Me (архив) 4 21-12-2004 19:01




 
Переход