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

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 verificar el estado de un servicio en Windows usando PowerShell.

Puedes usar el Obtener servicio Cmdlet de PowerShell para obtener una lista de todos los servicios instalados en los sistemas operativos Windows, su estado y tipo de inicio. Este y otros cmdlets que se usan para obtener el estado y administrar los servicios de Windows aparecieron por primera vez en PowerShell 1.0. En este artículo, mostraremos ejemplos típicos del uso del cmdlet Get-Service para obtener el estado de un servicio en computadoras locales o remotas (ejecutándose o deteniéndose), el tipo de inicio de servicios, también cubriremos cómo determinar las dependencias de servicios.

Puede obtener una lista de servicios en un equipo local o remoto mediante el cmdlet Get-Service. 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>]

Utilice Get-Service para comprobar el estado del servicio de Windows

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

Get-Service

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

  • Estado – muestra si el servidor está Corriendo o Detenido;
  • Nombre – muestra el nombre corto del servicio (usado con más frecuencia)
  • Nombre para mostrar – nombre completo del servicio (más descriptivo y legible por humanos).

Para guardar la lista de servicios en un archivo de texto para una investigación futura, use el cmdlet Out-File:

Get-Service | Out-File "C:PSCurrent_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 cmdlet Where-Object, 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”.

PowerShell comprobar el estado del servicio

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

get-service | get-member

Como puede ver, estos objetos tienen el Typename – 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 se utilizan cuando se muestran de forma predeterminada).

powershell comprobar 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 características del servicio Windows Update (wuauserv):

get-service wuauserv | select Displayname,Status,ServiceName,Can*

DisplayName : Windows Update

Status : Stopped

CanPauseAndContinue : False

CanShutdown : False

CanStop : False

PowerShell comprobar si existe el servicio

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

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

Por ejemplo, para obtener el tipo de inicio de servicios de Windows, ejecute el comando (funciona en PowerShell 5.1, introducido en Windows 10 / Windows Server 2016):

Get-Service | select -property name,starttype

Insinuación. Puede verificar la versión de PowerShell en su computadora con el comando:

$PSVersionTable

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

(Get-Service -Name wuauserv).StartupType

Obtener servicio de powershell

Hay 4 tipos posibles de servicios iniciales:

  • Automático – inicio automático durante el arranque de Windows;
  • AutomaticDelayedStart – inicio después del inicio del sistema;
  • Manual – arranque manual;
  • Discapacitado – el servicio está deshabilitado.

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 es un lenguaje que distingue entre mayúsculas y minúsculas. Significa que los siguientes comandos devolverán resultados iguales:

get-service win*

get-service WIN*

Para excluir algún servicio de la lista resultante, puede utilizar la opción -Excluir:

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

estado del servicio powershell

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

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

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

Si desea verificar si un servicio específico de Windows existe actualmente, puede usar los siguientes comandos (generalmente esta verificación se usa en varios scripts):

$servicename = “SomeService”

if (Get-Service $servicename -ErrorAction SilentlyContinue)

{

Write-Host "$servicename exists"

# do something

}

Demás {

Write-Host «$ servicename not found»

# hacer algo

}

PowerShell comprueba si el servicio se está ejecutando en una computadora remota

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

server1

server2

server3

PC21

PC34

powershell obtener el estado del servicio

Ahora ejecute el siguiente script de PowerShell:

$servicename = "SomeService"

$list = get-content “c:pscomp_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."}

}

Use PowerShell para verificar el estado del servicio en una computadora remota

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

get-service wuauserv -ComputerName remotePC1

En PowerShell v3, puede obtener 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

estado de obtención del servicio

Use el cmdlet format-table en este ejemplo para obtener una tabla más conveniente con la lista del estado de los servicios.

Además, puede obtener el estado del servicio en una lista de computadoras remotas que se almacena en un archivo de texto sin formato:

$list = get-content “c:pscomp_list.txt”
Get-Service -Computername (Get-Content -path “c:pscomp_list.txt”) -Name spooler | Select-Object MachineName,Name,Displayname,Status | Sort-Object Status

O puede verificar el estado del servicio en todas las computadoras en una AD OU específica:

$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

Utilice 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 El parámetro devuelve servicios que dependen de este servicio. El RequiredServices 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

servicios de lista de powershell

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

Get-Service -Name LanmanWorkstation -DependentServices

Si detiene manualmente todos los servicios de dependencia, no podrá ejecutar su servicio. Para ejecutar automáticamente todos los servicios de dependencia, use el siguiente resumen de PowerShell:

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

Administrar los servicios de Windows a través de PowerShell

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

Get-Command -Noun Service

obtener servicio de powershell

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:

Stop-Service: no se puede detener el servicio ‘SQL Server (MSSQLSERVER) (MSSQLSERVER)’ porque tiene servicios dependientes. Solo se puede detener si se establece el indicador Force.

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

Stop-Service –Name MSSQLSERVER -Force

Inicie el servicio:

Start-Service -Name Windefend

Reinicie el servicio:

Restart-Service -Name Windefend

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

Set-Service 'WinRM' -StartupType Disabled

Deja un comentario

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