visual ver tag studio servicio saber que obtener instalador dell crear como comando windows-services batch-file windows-server-2003

windows services - ver - Comando de Windows para obtener el estado del servicio?



obtener service tag cmd (12)

Necesito saber el estado de un servicio al final de mi script por lotes que reinicia los servicios usando "net stop thingie" y "net start thingie".

En mi mundo ideal favorito, me gustaría enviarme un correo electrónico al estado, leer en las noches frías de invierno, para tranquilizarme con la calidez y la comodidad de un servidor que sé que funciona correctamente.

Para que lo sepa, estoy usando una plataforma Windows Server 2003, y un archivo por lotes parece ser la mejor opción. No me importa usar otra cosa, y sería muy abierto a sugerencias, pero solo por el bien del conocimiento (como un zombi anhela cerebros, pensé, ¿por qué no inflar el mío), hay un comando que me permite verificar? ¿En el estado de un servicio, en línea de comando?

¿Debo simplemente redirigir la salida del comando a un archivo?

¿Dónde diablos están mis pantalones? (Dios mío, realmente espero que el humor insertado en esto no insulte a nadie. Es miércoles por la mañana, y también necesito el humor: P)

[Editar:] La solución que utilicé (ya no) está disponible para descargar desde --link redacted -

Se utiliza como un conjunto de tareas que se ejecutará durante la noche, y al revisar mi correo electrónico por la mañana, veo si el servicio se ha reiniciado correctamente o no.


¿Has probado sc.exe ?

C:/> for /f "tokens=2*" %a in (''sc query audiosrv ^| findstr STATE'') do echo %b 4 RUNNING C:/> for /f "tokens=2*" %a in (''sc query sharedaccess ^| findstr STATE'') do echo %b 1 STOPPED

Tenga en cuenta que dentro de un archivo por lotes duplicaría cada signo de porcentaje.


Bueno, no estoy seguro de si puede enviar por correo electrónico los resultados de un archivo por lotes. Si puedo hacer una sugerencia alternativa que resolvería su problema vbscript. No estoy muy bien con vbscript, pero puede usarlo para consultar los servicios que se ejecutan en la máquina local. La siguiente secuencia de comandos le enviará por correo electrónico el estado de todos los servicios que se ejecutan en la máquina en la que se ejecuta la secuencia de comandos. Obviamente, querrá reemplazar el servidor smtp y la dirección de correo electrónico. Si es parte de un dominio y ejecuta este script como usuario privilegiado (tienen que ser administradores en la máquina remota), también puede consultar máquinas remotas al reemplazar localhost con fqdn.

Dim objComputer, objMessage Dim strEmail '' If there is an error getting the status of a service it will attempt to move on to the next one On Error Resume Next '' Email Setup Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Service Status Report" objMessage.From = "[email protected]" objMessage.To = "[email protected]" objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ''Name or IP of Remote SMTP Server objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.net" ''Server port (typically 25) objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 Set objComputer = GetObject("WinNT://localhost") objComputer.Filter = Array("Service") For Each aService In objComputer strEmail = strEmail &chr(10) & aService.Name & "=" & aService.Status Next objMessage.TextBody = strEmail objMessage.Configuration.Fields.Update objMessage.Send

¡Espero que esto te ayude! ¡Disfrutar!

Edición: Ahh, una cosa más, un estado de servicio de 4 significa que el servicio se está ejecutando, un estado de servicio de 1 significa que no lo está. No estoy seguro de lo que significa 2 o 3, pero estoy dispuesto a apostar que están parando / arrancando.


Bueno, veo "Nick Kavadias" diciendo esto:

"según este http://www.computerhope.com/nethlp.htm debería ser NET START / LIST ..."

Si escribes en Windows XP esto:

NET START /LIST

obtendrá un error, simplemente escriba en su lugar

NET START

La / LIST es solo para Windows 2000 ... Si lees completamente esa web, verías que la / LIST está solo en la sección de Windows 2000.

¡¡¡Espero que esto ayude!!!


Puede llamar a net start "service name" en su servicio. Si no está iniciado, lo iniciará y devolverá errorlevel = 0, si ya está iniciado, devolverá errorlevel = 2.


Quizás esta podría ser la mejor manera de comenzar un servicio y verificar el resultado.

Por supuesto, desde dentro de un Lote como File.BAT ponga algo como este ejemplo, pero simplemente reemplace "NameOfSercive" con el nombre de servicio que desee y reemplace las líneas REM con su propio código:

@ECHO OFF REM Put whatever your Batch may do before trying to start the service net start NameOfSercive 2>nul if errorlevel 2 goto AlreadyRunning if errorlevel 1 goto Error REM Put Whatever you want in case Service was not running and start correctly GOTO ContinueWithBatch :AlreadyRunning REM Put Whatever you want in case Service was already running GOTO ContinueWithBatch :Error REM Put Whatever you want in case Service fail to start GOTO ContinueWithBatch :ContinueWithBatch REM Put whatever else your Batch may do

Otra cosa es verificar su estado sin cambiarlo, para eso hay una manera mucho más simple de hacerlo, simplemente ejecute:

net start

Como tal, sin parámetros mostrará una lista con todos los servicios que se inician ...

Así que un simple grep o encontrarlo después en una tubería cabría ...

Por supuesto, desde dentro de un Lote como File.BAT ponga algo como este ejemplo, pero simplemente reemplace "NameOfSercive" con el nombre de servicio que desee y reemplace las líneas REM con su propio código:

@ECHO OFF REM Put here any code to be run before check for Service SET TemporalFile=TemporalFile.TXT NET START | FIND /N "NameOfSercive" > %TemporalFile% SET CountLines=0 FOR /F %%X IN (%TemporalFile%) DO SET /A CountLines=1+CountLines IF 0==%CountLines% GOTO ServiceIsNotRunning REM Put here any code to be run if Service Is Running GOTO ContinueWithBatch :ServiceIsNotRunning REM Put here any code to be run if Service Is Not Running GOTO ContinueWithBatch :ContinueWithBatch DEL -P %TemporalFile% 2>nul SET TemporalFile= REM Put here any code to be run after check for Service

Espero que esto pueda ayudar !! Es lo que normalmente uso.


Ros el código que publico también es para saber cuántos servicios se están ejecutando ...

Imagina que quieres saber cuántos servicios son como Oracle *, luego pones Oracle en lugar de NameOfSercive ... y obtienes la cantidad de servicios como Oracle * que se ejecutan en la variable% CountLines% y si quieres hacer algo si solo hay 4 puedes hacer algo como esto:

IF 4 ==% CountLines% GOTO FourServicesAreRunning

Eso es mucho más poderoso ... y su código no le permite saber si el servicio deseado se está ejecutando ... si hay otro recurso que comienza con el mismo nombre ... imagine: -ServiceOne -ServiceOnePersonal

Si busca ServiceOne, pero solo está ejecutando ServiceOnePersonal, su código le indicará que ServiceOne se está ejecutando ...

Mi código se puede cambiar fácilmente, ya que lee todas las líneas del archivo y línea por línea también puede hacer lo que quiera con cada servicio ... vea esto:

@ECHO OFF REM Put here any code to be run before check for Services SET TemporalFile=TemporalFile.TXT NET START > %TemporalFile% SET CountLines=0 FOR /F "delims=" %%X IN (%TemporalFile%) DO SET /A CountLines=1+CountLines SETLOCAL EnableDelayedExpansion SET CountLine=0 FOR /F "delims=" %%X IN (%TemporalFile%) DO @( SET /A CountLine=1+CountLine REM Do whatever you want to each line here, remember first and last are special not service names IF 1==!CountLine! ( REM Do whatever you want with special first line, not a service. ) ELSE IF %CountLines%==!CountLine! ( REM Do whatever you want with special last line, not a service. ) ELSE ( REM Do whatever you want with rest lines, for each service. REM For example echo its position number and name: echo !CountLine! - %%X REM Or filter by exact name (do not forget to not remove the three spaces at begining): IF " NameOfService"=="%%X" ( REM Do whatever you want with Service filtered. ) ) REM Do whatever more you want to all lines here, remember two first are special as last one ) DEL -P %TemporalFile% 2>nul SET TemporalFile= REM Put here any code to be run after check for Services

Por supuesto, solo enumera los servicios en ejecución, no conozco ninguna forma en que net pueda enumerar los servicios en ejecución ...

¡¡¡Espero que esto ayude!!!


Si PowerShell está disponible para usted ...

Get-Service -DisplayName *Network* | ForEach-Object{Write-Host $_.Status : $_.Name}

Te regalaré...

Stopped : napagent Stopped : NetDDE Stopped : NetDDEdsdm Running : Netman Running : Nla Stopped : WMPNetworkSvc Stopped : xmlprov

Puede reemplazar la **** Network **** con un nombre de servicio específico si solo necesita marcar un servicio.


Usando pstools - en particular psservice y "consulta" - por ejemplo:

psservice query "serviceName"


Utilizando Windows Script:

Set ComputerObj = GetObject("WinNT://MYCOMPUTER") ComputerObj.Filter = Array("Service") For Each Service in ComputerObj WScript.Echo "Service display name = " & Service.DisplayName WScript.Echo "Service account name = " & Service.ServiceAccountName WScript.Echo "Service executable = " & Service.Path WScript.Echo "Current status = " & Service.Status Next

Puede filtrar fácilmente lo anterior para el servicio específico que desea.


de acuerdo con este http://www.computerhope.com/nethlp.htm debería ser NET START / LIST pero no puedo hacer que funcione en el cuadro de XP. Estoy seguro de que hay algunos WMI que te darán la lista.


mi intención era crear un script que encienda y apague los servicios (en 1 script)

net start NameOfSercive 2>nul if errorlevel 2 goto AlreadyRunning if errorlevel 1 goto Error

...

Ayudó mucho !! TYVM z666

pero cuando, por ejemplo, el servicio está deshabilitado (¿también errorlevel = 2?) va a "AlreadyRuning" y nunca llega a

if errorlevel 1 goto Error ?!!

Quería una salida para ese caso ...

:AlreadyRunning net stop NameOfSercive if errorlevel 1 goto Error :Error Echo ERROR!!1! Pause

mis 2 centavos espero que esto ayude


mira también hier:

NET START | ENCUENTRE "Nombre del servicio"> nul SI errorlevel 1 ECHO El servicio no se está ejecutando

solo copiado de: http://ss64.com/nt/sc.html