Comprobación del estado de los servicios de Windows con PowerShell – TrucosInformaticos

Powershell

Los servicios en Windows son una de las partes más importantes del sistema operativo. Anteriormente, para obtener el estado de un servicio en Windows, tenía que usar el complemento gráfico services.msc o la herramienta de línea de comandos sc.exe (por ejemplo, sc.exe query wuauserv).

En este artículo, veremos cómo usar PowerShell para verificar el estado de un servicio de Windows en una computadora local o remota. Además, analizaremos el tipo de inicio de servicios y cubriremos cómo determinar las dependencias de los servicios.

Sintaxis del cmdlet Get-Service

Puede obtener una lista de los servicios instalados, su estado y tipo de inicio en una computadora local o remota usando el Obtener servicio Cmdlet de PowerShell. Cuando ejecuta el comando Get-Service sin parámetros, devuelve una lista de todos los servicios en la computadora local.

Para obtener la sintaxis completa del cmdlet Get-Service, ejecute el comando:

get-help Get-Service

SYNTAX Get-Service [[-Name] <string[]>] [-ComputerName <string[]>] [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Exclude <string[]>] [<CommonParameters>]

Uso de Get-Service para verificar el estado del servicio de Windows

Este comando enumerará todos los servicios locales de Windows, su estado (en ejecución, detenido o en pausa) y los nombres para mostrar:

Get-Service

powershell obtener el estado del servicio

El cmdlet devuelve una lista de servicios ordenados por nombre. La lista contiene las siguientes propiedades de servicio de Windows:

  • Estado : muestra si el servicio está en ejecución o detenido.
  • Nombre — muestra el nombre abreviado del servicio (usado con más frecuencia).
  • Nombre para mostrar — nombre completo del servicio (más descriptivo y legible por humanos).

Para exportar la lista de servicios a un archivo de texto para futuras investigaciones, use el cmdlet Out-File:

Get-Service | Out-File "C:\PS\Current_Services.txt"

Para obtener dos o más estados de servicio, debe especificar sus nombres divididos por comas:

get-service bits, wuauserv

Si necesita mostrar solo los servicios en ejecución, use este comando:

Get-Service | Where-Object {$_.Status -EQ "Running"}

El operador de canalización (|) pasa los resultados al filtro Where-Object de PowerShell, que selecciona solo aquellos servicios para los que el parámetro Estado está establecido en «En ejecución». Si desea mostrar solo los servicios detenidos, especifique «Detenido».

estado del servicio powershell

Puede obtener todas las propiedades del objeto de servicio utilizando Get-Member.

get-service | get-member

Como puede ver, estos objetos tienen el tipo System.ServiceProcess.ServiceController. La captura de pantalla muestra todas las propiedades y métodos disponibles de los objetos de servicio en Windows (la mayoría de ellos no aparecen en la vista predeterminada).

powershell comprueba si el servicio se está ejecutando

Puede mostrar las propiedades del servicio específico. Por ejemplo, necesitamos mostrar el nombre para mostrar, el estado y las funciones del servicio de actualización de Windows (wuauserv). Use el cmdlet Select-Object de PowerShell para enumerar solo las propiedades del servicio que desea:

Get-Service wuauserv | Select-Object Displayname,Status,ServiceName,Can*

Nombre para mostrar: Actualización de Windows

Estado: Detenido

Puede pausar y continuar: falso

CanShutdown: Falso

Puede Parar: Falso

obtener el estado del servicio powershell

Puede encontrar todos los servicios que se pueden pausar y reanudar sin reiniciar Windows:

Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

Puede verificar el tipo de inicio de los servicios de Windows con el comando:

Get-Service | select -property name,starttype

Si necesita obtener solo el tipo de inicio del servicio, ejecute:

(Get-Service -Name wuauserv).StartType

Servicio de obtención de PowerShell

Hay 4 tipos de inicio posibles para los servicios de Windows:

  • Automático — inicio automático durante el arranque de Windows.
  • AutomaticDelayedStart — inicio después del arranque del sistema operativo.
  • Manual — arranque manual.
  • Desactivado — el servicio está deshabilitado.

Nota. Puede consultar cómo instalar y configurar el servicio SNMP en Windows.

Puede filtrar la lista de servicios por el nombre del servicio utilizando el asterisco como comodín:

get-service wi*

Además, tenga en cuenta que PowerShell no distingue entre mayúsculas y minúsculas. Significa que los siguientes comandos devolverán resultados iguales:

get-service win*

get-service WIN*

Para excluir algunos servicios de la lista resultante, puede utilizar el -Excluir opción:

Get-Service -Name "win*" -Exclude "WinRM"

servicio de verificación de powershell en ejecución

Puede ordenar los servicios en orden descendente por el valor de la propiedad Estado (los servicios en ejecución se muestran antes que los detenidos):

get-service s* | sort-object status –Descending

Consejo. Lamentablemente, el cmdlet Get-Service no le permite obtener información sobre la cuenta de usuario con la que se ejecuta el servicio. Si necesita encontrar todos los servicios que se ejecutan en cuentas de sistema no predeterminadas, use el cmdlet Get-CIMInstance:

Get-CIMInstance -Class Win32_Service -filter "StartName != 'LocalSystem' AND NOT StartName LIKE 'NT Authority%' " |Select-Object SystemName, Name, Caption, StartMode, StartName, State | Sort-Object StartName

Una tarea bastante común para un administrador al solucionar problemas de Windows es verificar cuáles de los servicios de Windows que deberían ejecutarse automáticamente están actualmente detenidos. Puede utilizar la opción FilterScript para buscar servicios que tengan el tipo de inicio automático y que no se estén ejecutando actualmente:

Get-Service | where -FilterScript {$_.Status -ne 'Running' -and $_.StartType -eq 'Automatic'} | ft 'Name','StartType','Status'

obtener servicio de computadora remota

Tenga en cuenta también que PowerShell Core 7.x presenta propiedades adicionales de Get-Service que no están disponibles en Windows PowerShell 5.1 (por ejemplo, UserName, BinaryPathName, StartType). Puede obtener el valor de estas propiedades en la consola de pwsh.exe (PowerShell 7.x).

Get-Service wuauserv | select Username,Starttype,BinaryPathName

obtener servicio

¿Cómo verificar el estado si existe un servicio específico a través de PowerShell?

Si desea verificar si actualmente existe un servicio específico de Windows, puede usar el siguiente script de PowerShell:

$servicename = “SomeService”

if (Get-Service $servicename -ErrorAction SilentlyContinue)

{

Write-Host "$servicename exists"

# do something

}

Else {

Write-Host ” $servicename not found”

# do something

}

obtener el estado del servicio

Puede verificar si existe un servicio de Windows específico en una lista de computadoras/servidores remotos. Para realizar esta tarea, debe guardar la lista de equipos remotos en el archivo de texto comp_list.txt en un formato simple:

server1

server2

server3

PC21

PC34

script de powershell para verificar el estado del servicio

Ahora ejecute el siguiente script de PowerShell:

$servicename = "SomeService"

$list = get-content “c:\ps\comp_list.txt”

foreach ($server in $list) {

if (Get-Service $servicename -computername $server -ErrorAction 'SilentlyContinue'){

Write-Host "$servicename exists on $server "

# do something

}

else{write-host "No service $servicename found on $server."}

}

Obtener el estado del servicio desde una computadora remota usando PowerShell

Puede usar el cmdlet Get-Service para obtener el estado de los servicios no solo en las computadoras locales sino también en las remotas. Para hacer esto, use el –Nombre de la computadora parámetro. Puede utilizar NetBIOS, el nombre FQDN o una dirección IP como nombre de equipo. La conexión a equipos remotos no se establece a través de PowerShell Remoting (WinRM), sino a través de Service Manager (similar al comando sc.exe).

get-service wuauserv -ComputerName remotePC1

Puede verificar el estado de los servicios en varias computadoras remotas a la vez (sus nombres deben estar separados por comas).

get-service spooler -ComputerName remotePC1,remotePC2, remotePC3| format-table Name,Status,Machinename –autosize

obtener servicio powershell

También puede comprobar el estado del servicio en una lista de equipos remotos desde un archivo de texto sin formato:

$list = get-content “c:\ps\comp_list.txt”

Get-Service -Computername $list -Name spooler | Select-Object MachineName,Name,Displayname,Status | Sort-Object Status

O puede verificar el estado del servicio en todas las computadoras en una unidad organizativa específica de Active Directory:

$Computers = (Get-ADComputer -SearchBase ‘OU=Servers,OU=UK,DC=theitbros,DC=com’).names

foreach ($computer in $computers)

{

Get-Service -ComputerName $computer.Name -Name wuauserv | Where-Object {$_.status -eq "running"} | select status,name,machinename

}

Para reiniciar un servicio en una computadora remota, use el siguiente comando:

Get-Service wuauserv -ComputerName server1| Restart-Service

Nota. El cmdlet Get-Service en PowerShell Core (PowerShell 6.x y 7.x), a diferencia de Windows PowerShell 5.1, no tiene el parámetro ComputerName, por lo que no puede usarlo para verificar el estado de los servicios en equipos remotos.

servicios de lista de powershell

Para acceder a equipos remotos desde dentro de PowerShell Core, debe usar PowerShell Remoting sobre WinRM. Por ejemplo, puede sondear el estado del servicio en varias computadoras remotas usando Invoke-Command. Por ejemplo:

$cred = Get-Credential

Invoke-Command -ComputerName dc03,dc02 {get-service wuauserv} -Credential $cred

el servicio de verificación de powershell se está ejecutando

Use Get-Service para mostrar las dependencias del servicio

El cmdlet Get-Service tiene otros dos parámetros útiles que puede usar al administrar los servicios de Windows. El Servicios dependientes parámetro devuelve servicios que dependen de este servicio. El Servicios requeridos El parámetro devuelve los servicios de los que depende este servicio.

El siguiente comando recibe los servicios que debían ejecutarse antes de iniciar el servicio LanmanWorkstation:

Get-Service -Name LanmanWorkstation –RequiredServices

verificar si el servicio está ejecutando powershell

El siguiente comando devuelve servicios dependientes que requieren el servicio LanmanWorkstation:

Get-Service -Name LanmanWorkstation -DependentServices

Enumere todos los servicios que tienen dependencias:

Get-Service | Where-Object {$_.RequiredServices -or $_.DependentServices} |FT -Property Status, Name, RequiredServices, DependentServices -auto

obtener el estado del servicio de PowerShell

Si detiene manualmente todos los servicios de dependencia, no podrá ejecutar su servicio. Para ejecutar automáticamente todos los servicios de dependencia, use la siguiente línea de PowerShell:

get-service servicename | Foreach {start-service $_.name -passthru; start-service $_.DependentServices -passthru}

Administración de servicios de Windows a través de PowerShell

Hay otros cmdlets útiles en el módulo de PowerShell para administrar servicios. Para enumerar todos los comandos de PowerShell disponibles que se usan para administrar los servicios de Windows, ejecute:

Get-Command -Noun Service

Aquí hay una lista completa de los cmdlets de administración de servicios en PowerShell Core 7.3:

  • Obtener servicio
  • Nuevo servicio
  • Quitar servicio
  • Reiniciar servicio
  • Servicio de currículum
  • Servicio fijo
  • Comienza el servicio
  • Parada de servicio
  • Servicio suspendido

script de powershell para verificar el estado del servicio en múltiples servidores

Puede usar estos cmdlets para iniciar, detener, reiniciar o cambiar el tipo de inicio del servicio.

Para administrar los servicios, asegúrese de ejecutar powershell.exe como administrador. Debe iniciar, detener, reiniciar o cambiar el tipo de inicio del servicio.

Parada de servicio:

Stop-Service -Name Windefend

Cuando detiene algunos servicios, puede aparecer un error:

Servicio de detención: no se puede detener el servicio ‘SQL Server (MSSQLSERVER) (MSSQLSERVER)’ porque tiene servicios dependientes. Solo se puede detener si se establece el indicador Forzar.

Para forzar la detención de este y el servicio dependiente, use el -Fuerza parámetro:

Stop-Service –Name MSSQLSERVER -Force

Iniciar el servicio:

Start-Service -Name Windefend

Reiniciar el servicio:

Restart-Service -Name Windefend

Pista. Puede forzar el reinicio de un servicio de Windows colgado con los comandos:

$ServiceProcess = Get-CimInstance -ClassName Win32_Service -filter "name="myservicename""

Stop-Process -Id $ServiceProcess.ProcessId

Si necesita cambiar el tipo de inicio del servicio (por ejemplo, de Automático a Deshabilitado), ejecute:

Set-Service 'WinRM' -StartupType Disabled

O puede cambiar la descripción del servicio:

Set-Service 'myservice' -Description 'some test'

Puede configurar el servicio para que se ejecute con una cuenta de usuario específica. Anteriormente, estos ajustes solo se podían establecer manualmente en el Acceder pestaña en el Servicios interfaz gráfica de usuario de la consola.

comprobar el estado del servicio powershell

Primero necesita obtener el nombre de usuario y la contraseña:

$Credential = Get-Credential

Una vez capturadas las credenciales, puede configurarlas para el servicio. El servicio debe detenerse antes de cambiar las credenciales:

$ServiceName="mysvc"

Get-Service -Name $ServiceName | Stop-Service

Set-Service -Name $ServiceName -Credential $Credential

Get-Service -Name $ServiceName | Start-Service

Algunos servicios de Windows se pueden suspender con el comando Suspender-Servicio:

Get-Service -Name 'wuauserv'|Suspend-Service

Si intenta suspender un servicio que no admite este método, aparecerá un error:

Servicio suspendido: el servicio ‘Actualización de Windows (wuauserv)’ no se puede suspender porque el servicio no admite la suspensión ni la reanudación.

powershell get-service computadora remota

Para encontrar los servicios de Windows que puede pausar, ejecute el comando:

Get-Service | where CanPauseAndContinue | select -Property Name,CanPauseAndContinue,DisplayName

El cmdlet Resume-Service se usa para iniciar el servicio suspendido:

Get-Service -Name 'Winmgmt' | Suspend-Service | Resume-Service

Para crear un nuevo servicio con el cmdlet New-Service, debe especificar su nombre y la ruta al archivo binario:

New-Service -Name 'MyNewService' -BinaryPathName 'C:\ps\testsvc.exe'

Puede usar el cmdlet New-Service para especificar una credencial de cuenta para iniciar un servicio con:

$credential = Get-Credential

New-Service -Name 'MyNewService'-BinaryPathName 'C:\ps\testsvc.exe' -DisplayName 'My Test Service' -Credential $credential -DependsOn WinRM

Pista. Ingrese el nombre de su cuenta de usuario de dominio como usuario@dominio.com.

Para eliminar un servicio:

Remove-Service -Name 'MyNewService'

Nota. El cmdlet Remove-Service está disponible en PowerShell Core 6.x +.

4.4/5 - (146 votos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *