¿Cómo reiniciar un servicio de Windows usando PowerShell?
Como administrador de sistemas, me he encontrado con casos en los que un servicio en una computadora o servidor dejaba de funcionar, lo que provocaba que el sistema no estuviera disponible. En tales situaciones, reiniciar el servicio puede ser una solución rápida. Sin embargo, reiniciar manualmente los servicios en varios sistemas puede llevar mucho tiempo y ser tedioso. Aquí es donde PowerShell resulta útil. El cmdlet Restart-Service de PowerShell proporciona una forma sencilla de detener e iniciar un servicio en una computadora local o remota. En este artículo, cubriremos los conceptos básicos del uso de Restart-Service para reiniciar servicios en PowerShell. Aprenderá la sintaxis básica, cómo apuntar a servicios locales o remotos, reiniciar varios servicios a la vez e incluso cómo crear secuencias de comandos y programar reinicios automáticos.
¿Por qué debería utilizar PowerShell para reiniciar los servicios?
Hay varias razones por las que es posible que necesite reiniciar un servicio en una computadora o servidor. Reiniciar los servicios es necesario para solucionar problemas, aplicar actualizaciones o reiniciar procesos. Hacer esto manualmente a través de la consola de servicios de Windows puede llevar mucho tiempo, especialmente si necesita reiniciar varios servicios en muchas computadoras. Algunas de estas razones incluyen:
1. Fallo del servicio
Los servicios pueden fallar por varias razones, incluidas fallas de hardware, errores de software y errores de configuración. Cuando un servicio falla, el sistema puede dejar de estar disponible o volverse inestable. A veces, reiniciar el servicio puede solucionar el problema.
2. Actualizaciones de software
Cuando instala actualizaciones de software en una computadora o servidor, es posible que deba reiniciar los servicios para asegurarse de que los cambios surtan efecto.
3. Problemas de rendimiento
En ocasiones, los servicios pueden consumir demasiada memoria o CPU, lo que provoca problemas de rendimiento. Reiniciar el servicio puede ayudar a liberar recursos y mejorar el rendimiento del sistema.
Descripción del cmdlet PowerShell Restart-Service
El cmdlet Restart-Service se utiliza para reiniciar servicios en PowerShell. Este comando se puede utilizar para reiniciar servicios en la computadora local o en computadoras remotas. Estos son los parámetros importantes del comando Restart-Service:
| Parameter | Description | Example Usage |
|---|---|---|
-Name | Specifies the name of the service you want to restart. | Restart-Service -Name "ServiceName" |
-DisplayName | Allows you to specify the service by its display name instead of its service name. | Restart-Service -DisplayName "Display Name" |
-Force | Restarts the service and any dependent services. | Restart-Service -Name "ServiceName" -Force |
-Exclude | Excludes specified services from being restarted, useful when using wildcard characters. | Restart-Service -Name * -Exclude "ServiceToExclude" |
-Include | The -Include parameter of the Restart-Service cmdlet is used to specify an array of service names to include in the operation. | Restart-Service -Name 'win*' -Include 'WinRM','Winmgmt' |
Más información sobre la sintaxis y los parámetros de Restart-Service está aquí: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-service?view=powershell-7.3
Reiniciar un servicio a través de la consola de servicios
Para reiniciar un servicio a través de la Consola de servicios, siga estos pasos:
Abra la consola de Servicios buscando "Servicios" en el menú de inicio de Windows. Puede hacer esto presionando la tecla Windows + R y escribiendo "services.msc" en el cuadro de diálogo Ejecutar.
- Ubique el servicio que desea reiniciar en la lista de servicios.
Haga clic derecho en el servicio y seleccione "Reiniciar" en el menú contextual. El estado del servicio cambiará a "Deteniendo" y luego a "Iniciando" cuando el servicio se reinicie.
- Alternativamente, puede detener el servicio seleccionando "Detener" en el menú contextual y luego iniciarlo nuevamente seleccionando "Iniciar".
Cuando se complete el reinicio, el estado del servicio se mostrará como "En ejecución". Si prefiere utilizar la línea de comando, puede utilizar los comandos "net stop" y "net start" para detener e iniciar un servicio, respectivamente. También puede reiniciar un servicio a través del Administrador de tareas >> Servicios.
¿Cómo reiniciar un servicio usando PowerShell?
PowerShell hace que reiniciar servicios sea rápido y sencillo. El cmdlet Restart-Service le permite reiniciar servicios por nombre, nombre para mostrar o referencia de objeto. Para reiniciar un servicio en la computadora local, abra PowerShell y escriba la siguiente sintaxis:
Restart-Service -Name <ServiceName>
Reemplace con el nombre del servicio que desea reiniciar. Por ejemplo, para reiniciar el servicio Print Spooler, escriba:
Restart-Service -Name Spooler -PassThru
Esto reiniciará el servicio Print Spooler en la computadora local. Aquí, -Name especifica el nombre del servicio que desea reiniciar. El nombre del servicio es diferente del nombre para mostrar, que generalmente es lo que ve en el administrador de servicios. Para especificar un servicio por su nombre para mostrar, utilice el parámetro -displayname. El parámetro -PassThru espera hasta que se reinicie el servicio y muestra su estado de ejecución.
Alternativamente, puede usar Get-Service para buscar el nombre del servicio y canalizar el objeto de servicio al cmdlet Restart-Service.
Get-Service Spooler | Restart-Service
El servicio de reinicio determina automáticamente los servicios dependientes y también los reinicia. Necesita acceso de administrador para poder reiniciar los servicios, ¡por cierto! De lo contrario, se enfrentará a: "Reiniciar-Servicio: El servicio 'Nombre del servicio' no se puede detener debido al siguiente error: No se puede abrir
Tenga en cuenta que los servicios solo se pueden iniciar si el tipo de inicio está configurado en automático, manual y automático (inicio retrasado). No puede iniciar el servicio si está deshabilitado. Puede cambiar el tipo de inicio del servicio usando:
Set-Service -Name "Service Name" -StartupType Automatic
Utilice el parámetro -Force para reiniciar inmediatamente un servicio
De forma predeterminada, Restart-Service envía un mensaje de detención y espera a que el servicio entre en estado detenido antes de reiniciarse. Esto ayuda a garantizar un reinicio adecuado, pero puede llevar más tiempo. Puede utilizar el parámetro -Force para reiniciar inmediatamente el servicio después de enviar un mensaje de detención:
Restart-Service -Name Spooler -Force
Esto evita la espera y reinicia el servicio lo antes posible. Utilice -Force cuando necesite reiniciar rápidamente un servicio.
¿Cómo identificar el nombre del servicio que desea reiniciar?
¿No estás seguro del nombre del servicio que necesitas reiniciar? Utilice el cmdlet Get-Service para encontrarlo. Esto devolverá un objeto que representa cada servicio, lo que le ayudará a identificarlos por su nombre de servicio o el nombre para mostrar de los servicios. Simplemente abra la consola de PowerShell y escriba Get-Service para enumerar todos los servicios:
Además de la columna Nombre del cmdlet anterior, también puede obtener el nombre del servicio desde la consola de servicios:
Puede utilizar comodines para obtener múltiples servicios. Digamos, por ejemplo, Busquemos todos los servicios en la computadora (comenzando con “Samsung Mobile”) y reiniciemos los que estén detenidos:
Get-service -DisplayName "Samsung*" | where {$_.Status -eq "Stopped"} | Restart-Service
También puede filtrar servicios por sus otras propiedades utilizando el cmdlet Where-object:
Get-Service | Where-Object {$_.Name -like "*print*"} | Restart-Service
Detener e iniciar el servicio de Windows usando Powershell
A continuación se explica cómo detener e iniciar los servicios de Windows mediante PowerShell:
Detener un servicio de Windows
Para detener un servicio, utilice el cmdlet Stop-Service. Especifique el nombre del servicio o el nombre para mostrar utilizando el parámetro -Name:
Stop-Service -Name "Spooler"
Esto envía un mensaje de detención al controlador de servicios de Windows. También puede canalizar Get-Service para detener o iniciar un servicio. P.ej.,
Get-Service -Name 'ServiceName' | Stop-Service
Alternativamente, puede utilizar el parámetro InputObject como:
#Get the specific service
$Service = Get-service -DisplayName "Print Spooler"
#Stop the service
Stop-Service -InputObject $Service -Verbose
Iniciar un servicio de Windows
Para iniciar un servicio, utilice el cmdlet Start-Service, especificando nuevamente el nombre del servicio con -Name:
Start-Service -Name "Spooler"
Esto envía un mensaje de inicio para reiniciar el servicio. Puede verificar el estado usando Get-Service para confirmar que se detuvo:
Get-Service -Name Spooler
Detener/iniciar varios servicios
Puede apuntar a múltiples servicios usando una matriz:
$services = @("Spooler", "Wsearch")
Restart-Service -Name $services
Esto proporciona una manera sencilla de detener e iniciar múltiples servicios de Windows con PowerShell.
Reiniciar servicios con PowerShell en una computadora remota
Para reiniciar un servicio en una computadora remota, use el parámetro -ComputerName. Aquí hay un ejemplo:
#Get the service in Remote computer
$Service = Get-service -DisplayName "Print Spooler" -ComputerName "FileServer"
#Restart the service
Restart-Service -InputObject $Service -Verbose
Alternativamente, puede reiniciar un servicio de forma remota con el cmdlet Invoke-Command. Por ejemplo, para reiniciar el servicio Print Spooler en una computadora remota llamada RemoteComputer, escriba el siguiente comando:
#Enter into a new session
$Session = New-PSsession -Computername "RemoteComputer"
#Execute PowerShell script remotely
Invoke-Command -Session $Session -ScriptBlock {Restart-Service "webClient"}
#Disconnect the Session
Remove-PSSession $Session
Necesitará credenciales administrativas en la computadora remota para reiniciar los servicios.
Ejecución remota de PowerShell: requisitos
Tenga en cuenta que la comunicación remota de PowerShell tiene los siguientes requisitos:
- WinRM: el servicio de administración remota de Windows (WinRM) debe estar ejecutándose en la computadora remota y configurado correctamente para permitir conexiones remotas. Puede configurarlo ejecutando
winrm quickconfigen la computadora remota. - Firewall: asegúrese de que el firewall permita el tráfico WinRM (normalmente HTTP a través del puerto 5985 o HTTPS a través del puerto 5986).
- Permisos: asegúrese de tener los permisos necesarios para ejecutar comandos en la computadora remota. Es posible que necesite privilegios administrativos, dependiendo de lo que esté intentando hacer.
- Red: Tanto el ordenador local como el remoto deben ser accesibles a través de la red.
Script de PowerShell para reiniciar servicios en varias computadoras
También puede utilizar un script de PowerShell para reiniciar servicios en varias computadoras. El script se puede utilizar para reiniciar servicios en una lista de computadoras o en todas las computadoras de un dominio. A continuación se muestra un script de ejemplo que reinicia el servicio Print Spooler en una lista de computadoras:
$Computers = Get-Content "C:\temp\computers.txt"
$ServiceName = "Spooler"
foreach ($Computer in $Computers)
{
Write-Host "Restarting service on $Computer"
Invoke-Command -ComputerName 'RemoteServerName' -ScriptBlock {
Restart-Service -Name $ServiceName -Force
}
}
En este script, el cmdlet Get-Content lee una lista de nombres de computadoras de un archivo y el bucle foreach reinicia el servicio Print Spooler en cada computadora.
Reiniciar los servicios IIS con PowerShell
Además de los servicios de Windows, también puede utilizar PowerShell para reiniciar los servicios de IIS. Reiniciar los servicios IIS (Internet Information Services) puede ser una tarea administrativa común al administrar un servidor web. Puede utilizar PowerShell para realizar esta tarea.
Para reiniciar el Servicio de publicación World Wide Web (W3SVC) en la computadora local, escriba el siguiente comando:
Restart-Service -Name W3SVC
Para reiniciar el servicio W3SVC en una computadora remota, puede usar Invoke-Command para ejecutar un bloque de script en una computadora remota. Así es como puede reiniciar los servicios de IIS:
Invoke-Command -ComputerName 'RemoteServerName' -ScriptBlock {
iisreset
} -Credential (Get-Credential)
En lugar de IISReset en el bloque de script, también puede usar: "Restart-Service 'W3SVC'". Puede especificar las credenciales para conectarse agregando el parámetro -Credential a Invoke-Command o Enter-PSSession.
Reiniciar un sitio web específico de forma remota
Si desea reiniciar un sitio web específico en una computadora remota, puede usar Invoke-Command para ejecutar los cmdlets necesarios.
Invoke-Command -ComputerName 'RemoteServerName' -ScriptBlock {
Import-Module WebAdministration
Stop-WebSite -Name 'Default Web Site'
Start-WebSite -Name 'Default Web Site'
}
¿Cómo reiniciar varios servicios usando PowerShell?
Si bien los cmdlets individuales son potentes, un script de PowerShell puede ayudarle a realizar tareas más complejas, como reiniciar varios servicios en un orden específico. Puede crear una secuencia de comandos para reiniciar servicios según condiciones personalizadas e incluso aplicarla a varias computadoras.
Tener que reiniciar los servicios uno por uno puede resultar tedioso. Afortunadamente, Restart-Service facilita el reinicio de varios servicios al mismo tiempo.
Tiene algunas opciones diferentes para reiniciar múltiples servicios:
- Usar comodines: el parámetro
-Nameacepta caracteres comodín para apuntar a múltiples servicios. Por ejemplo:
Restart-Service -Name *print*
Objeto de entrada: puede canalizar una colección de servicios desde Get-Service para apuntar a múltiples servicios:
Get-Service | Where-Object {$_.Name -like "*print*"} | Restart-Service
Especifique nombres de servicios: Puede proporcionar una lista de servicios separados por comas:
Restart-Service Spooler,Wsearch
Esto proporciona flexibilidad para reiniciar grupos de servicios relacionados.
PowerShell para reiniciar múltiples servicios si están en estado detenido
Para reiniciar varios servicios solo si están detenidos, puede usar PowerShell para verificar primero el estado de cada servicio. Si se detiene un servicio, puede reiniciarlo. Así es como puedes hacer esto:
# Define an array of service names you want to restart
$serviceNames = @('seclogon', 'WAS', 'TermService')
# Loop through each service name in the array
Try {
ForEach ($ServiceName in $serviceNames) {
# Retrieve the current status of the service
$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
# Check if the service exists
if ($service -ne $null) {
# Check if the service is stopped
if ($service.Status -eq 'Stopped') {
# Restart the service
Restart-Service -Name $serviceName -ErrorAction Stop
Write-Host -f Yellow "Restared the service $serviceName because it was stopped"
} else {
# Output the current status of the service
Write-Host -f Green "Service $serviceName is currently $($service.Status)"
}
} else {
Write-Host -f Yellow "Service $ServiceName does not exist!"
}
}
}
catch {
Write-Host -f Red "An error occurred: $_"
}
¿Cómo programar el reinicio de los servicios?
Puede crear fácilmente scripts de PowerShell para automatizar el reinicio de los servicios de Windows. Esto le permite programar tareas de reinicio utilizando herramientas como el Programador de tareas de Windows.
Aquí hay un script de ejemplo que reinicia dos servicios todos los días a la 1 a. m.:
# Daily service restart script
$services = @("Spooler","Wsearch")
foreach ($service in $services) {
Restart-Service -Name $service -Force
}
Guarde este script como Restart-Services.ps1 y llámelo desde el Programador de tareas. ¡Esto automatiza la tarea!
Mejores prácticas para reiniciar servicios con PowerShell
Al reiniciar servicios con PowerShell, es importante seguir las mejores prácticas para garantizar un proceso fluido y exitoso. A continuación se ofrecen algunos consejos:
1. Verificar el nombre y el estado del servicio
Antes de reiniciar un servicio, verifique el nombre del servicio para asegurarse de que está reiniciando el servicio correcto. Verifique el estado actual del servicio usando Get-Service. Asegúrese de que el servicio no esté detenido antes de intentar reiniciarlo.
2. Detener los servicios dependientes
Si un servicio tiene servicios dependientes, detenga los servicios dependientes antes de reiniciar el servicio principal.
3. Verifique el estado del servicio
Después de reiniciar un servicio, verifique el estado del servicio para asegurarse de que se esté ejecutando.
4. Probar la funcionalidad del servicio
Pruebe la funcionalidad del servicio después de reiniciar para asegurarse de que funcione como se esperaba.
5. Manejo de errores
En los scripts de producción, es una buena práctica incluir el manejo de errores, como bloques try/catch, especialmente cuando se realizan acciones que podrían afectar la estabilidad o disponibilidad del sistema. P.ej.
try {
Restart-Service -Name 'ServiceName' -ErrorAction Stop
}
catch {
Write-Host "An error occurred: $_"
}
Solución de problemas comunes con el reinicio del servicio
A veces, al reiniciar servicios con PowerShell se pueden producir errores. A continuación se muestran algunos problemas comunes y sus soluciones:
- Acceso denegado: si recibe un error de acceso denegado al reiniciar un servicio, asegúrese de tener credenciales administrativas en la computadora local o remota.
- Servicio no encontrado: si recibe un error de servicio no encontrado, verifique que haya ingresado el nombre de servicio correcto.
- Dependencias del servicio: si un servicio tiene servicios dependientes, detenga los servicios dependientes antes de reiniciar el servicio principal.
- Versión de PowerShell: Asegúrese de estar utilizando la última versión de PowerShell para evitar problemas de compatibilidad.
Tail: ¿Cómo crear un nuevo servicio y eliminar servicios existentes usando PowerShell?
PowerShell proporciona algunos cmdlets más para una gestión eficiente de los servicios. Puede aprovisionar nuevos servicios y eliminar servicios existentes a través de PowerShell. Aquí hay un ejemplo rápido:
#Create a New service to Execute PowerShell script
New-Service -name SiteBackupScript -binaryPathName "C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -File C:\Scripts\BackupScript.ps1"
#Delete existing service
(Get-WmiObject win32_service -Filter "name='SiteBackupScript'").delete()
#From PowerShell 6 onwards, You can use:
Remove-Service -Name "SiteBackupScript"
Conclusión y próximos pasos
Reiniciar los servicios de Windows es una tarea común necesaria para administrar servidores y estaciones de trabajo. Sin embargo, hacer esto manualmente a través de la consola de Servicios es lento y tedioso. El cmdlet Restart-Service de PowerShell proporciona un método rápido y flexible para reiniciar servicios. En esta guía completa, exploramos cómo reiniciar servicios con PowerShell. Hemos cubierto varios escenarios, incluido el reinicio de servicios en las computadoras locales y remotas, el uso de scripts para reiniciar servicios y el reinicio de servicios IIS. También analizamos las mejores prácticas y la solución de problemas comunes. Si sigue estas pautas, podrá dominar el arte del reinicio del servicio con PowerShell y ahorrar tiempo y esfuerzo en la administración de sus sistemas.
Ahora que ha aprendido cómo reiniciar servicios con PowerShell. La próxima vez, deberá reiniciar un servicio, recurrir a PowerShell y Restart-Service para ahorrar tiempo y esfuerzo. ¡Feliz guión!





