PowerShell es una gran herramienta de scripting. No sólo ayuda a ahorrar tiempo, sino que también proporciona una mayor flexibilidad para ejecutar tareas repetidas manualmente o a través de tareas programadas. Casi todas las funciones y características de Windows se suministran con cmdlets de PowerShell.
Puede utilizar los cmdlets del sistema operativo Windows, disponibles por defecto, para realizar tareas operativas como la comprobación del estado de un determinado servicio de Windows en varios equipos, la comprobación de la lista de software instalado en equipos Windows, la comprobación y recopilación de funciones y características instaladas en los sistemas operativos Windows Server y mucho más.
Una de las tareas que los administradores de Windows realizan con frecuencia es la comprobación del estado de los servicios críticos en los servidores de producción críticos, como los servidores Exchange, los servidores SQL y/o los controladores de dominio de Active Directory.
Aunque puede utilizar SCCM y herramientas similares para proporcionarle un informe sobre el estado de los servicios de un conjunto particular de máquinas, SCCM requiere que el Cliente SCCM esté funcionando en todos los equipos de destino antes de que SCCM pueda informar sobre el estado de los servicios.
Aquí es donde nuestro último script y el Tutorial del Servidor resultan útiles. Puede utilizar el script de PowerShell que se explica en este artículo para comprobar rápida y fácilmente el estado de determinados servicios en uno o varios equipos Windows.
Comprobar el estado de un solo servicio
Si quieres comprobar el estado de un servicio concreto en un equipo remoto, lo que puedes hacer es ejecutar el siguiente comando de PowerShell:
Get-WMIObject -Computer -Query "Select * From Win32_Service WHERE Name Like "%SomeServiceName%"
Ejecutar el comando de PowerShell anterior te ayudará a obtener el estado de un servicio específico especificado en el parámetro «%SomeServiceName%. Este comando se conecta a un equipo remoto especificado en el parámetro «-Computer». Es probable que quieras cambiar tanto el nombre del ordenador como el del servicio antes de ejecutar el comando anterior.
Comprobar el estado de varios servicios
En caso de que desee obtener una lista de todos los servicios de Windows que se están ejecutando en un sistema de destino, ejecute el siguiente comando de PowerShell:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto
El comando anterior enumerará todos los servicios de Windows que se están ejecutando desde el equipo remoto especificado en el parámetro «-Computer», y la salida se mostrará en la ventana de PowerShell. Si desea guardar la salida en un archivo CSV, la adición de «Export-CSV» hará el trabajo como se muestra en este comando:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto | Export-CSV "C:TempServicesStatus.CSV"
Comprobar el estado de un solo servicio en varios equipos
Aunque los comandos de PowerShell anteriores le ayudarán a obtener el estado de un servicio específico o de varios servicios desde un solo equipo Windows, el siguiente script de PowerShell se puede utilizar si desea ver el estado de un solo servicio desde varios equipos Windows. Todo lo que tiene que hacer es crear un archivo de texto que contenga los nombres de los ordenadores Windows y modificar la variable de script «$ServiceNameToCheck» para incluir el servicio que le gustaría comprobar.
$ServiceNameToCheck ="SomeServiceName"
$ReportFile = "C:TempServiceStatus.CSV"
Remove-item $ReportFile -ErrorAction SilentlyContinue
$ThisSTR = "Computer Name, Service Status"
Add-Content $ReportFile $ThisSTR
$CompFile = "C:TempComputers.TXT"
Foreach ($ComputerName in Get-Content "$CompFile")
{
$Error.Clear()
Get-WMIObject -Computer $ComputerName -Query "Select * From Win32_Service WHERE Name Like "%$ServiceNameToCheck% AND {$_.State -eq "Running"}
IF ($Error.Count -ne 0)
{
$ThisSTR = $ComputerName+", Could Not Connect to Remote Computer or Service Not Running"
Add-Content $ReportFile $ThisSTR
}
else
{
$ThisSTR = $ComputerName+", Running"
Add-Content $ReportFile $ThisSTR
}
}
Write-Host "Service status was retrieved from the list of computers and the output was saved in $ReportFile"
Una vez que el script PowerShell anterior haya terminado de ejecutarse, se creará un archivo de informe llamado ServiceStatus.CSV en la carpeta «C:Temp» que contiene el estado del nombre del servicio especificado en la variable «$ServiceNameToCheck» de todos los equipos mencionados en el archivo «C:TempComputers.TXT».
Nótese que el script comprueba que el comando se ha ejecutado correctamente antes de informar del estado del servicio. El script de PowerShell utiliza el cmdlet de PowerShell «Get-WMIObject» para recopilar el estado de los servicios específicos de los ordenadores de destino. En caso de que Get-WMIObject no pueda conectarse a un equipo de destino o si no se recupera el estado del servicio, devolverá el mensaje «Could Not Connect to Remote Computer or Service Not Running» en el informe.
Conclusión
Es bastante sencillo obtener el estado de uno o varios servicios de uno o varios equipos Windows remotos. Aunque hay herramientas empresariales disponibles para recopilar un inventario de equipos Windows, incluyendo el estado de los servicios, también hay casos en los que estos comandos/scripts de PowerShell resultan muy útiles, sobre todo cuando se necesita comprobar rápidamente el estado de un servicio concreto en varios equipos Windows.
Nirmal Sharma es MCSEx3, MCITP y Microsoft MVP en Servicios de Directorio. Está especializado en servicios de directorio, Microsoft Azure, clústeres de conmutación por error, Hyper-V, System Center y servidores Exchange, y ha estado involucrado con las tecnologías de Microsoft desde 1994. En su tiempo libre, le gusta ayudar a los demás y compartir algunos de sus conocimientos escribiendo consejos y artículos en varios sitios y contribuyendo a los Health Packs de las soluciones ADHealthProf.ITDynamicPacks.Net. Nirmal puede ser contactado en .
Sigue a ServerWatch en Twitter y en Facebook