Cómo gestionar servicios en PowerShell
- Listar Servicios en PowerShell
- Encontrar Servicios Remotos en PowerShell
- Iniciar y Detener Servicios en PowerShell
- Reiniciar Servicio en PowerShell
- Cambiar el Tipo de Inicio de un Servicio en PowerShell

Los servicios de Windows son uno de los temas que casi todos los administradores de sistemas de Windows deben utilizar. Por supuesto, para gestionar los servicios de Windows, podríamos iniciar el complemento MMC services.msc
para tareas puntuales, pero ¿qué pasa si necesitamos crear algo de automatización con PowerShell?
Este artículo discutirá todos los cmdlets de servicio de PowerShell, cómo usarlos y desarrollar nuestro script para gestionar servicios en muchas computadoras, local o remotamente.
Listar Servicios en PowerShell
Una de las tareas más básicas que podemos realizar con Windows PowerShell y servicios es simplemente enumerar qué servicios existen en una computadora local o remota. Por ejemplo, abre PowerShell, ejecuta el comando Get-Service
y observa la salida.
El comando Get-Service
por sí solo listará todos los servicios en la computadora local y el Estado
, el Nombre
y el NombreVisible
de cada servicio.
Get-Service
Salida:
Status Name DisplayName
------ ---- -----------
Stopped AarSvc_55244 AarSvc_55244
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Running AMD Crash Defen... AMD Crash Defender Service
<SNIP>
Como muchos otros cmdlets, PowerShell no devuelve todas las propiedades para cada servicio.
Aunque, por ejemplo, nos gustaría ver un servicio requerido o quizás la descripción del servicio, podemos encontrar estas propiedades canalizando el resultado al comando Select-Object
y usando el comodín *
para representar todas las propiedades.
Get-Service ALG | select *
Salida:
Name : ALG
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : Application Layer Gateway Service
DependentServices : {}
MachineName : .
ServiceName : ALG
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
StartType : Manual
Site :
Container :
Encontrar Servicios Remotos en PowerShell
Quizás estemos en una red y necesitemos enumerar servicios en una o más computadoras de Windows remotas. Podríamos haber hecho esto en los días de Windows PowerShell usando el parámetro -ComputerName
, pero desafortunadamente, ese parámetro ya no existe.
Una forma de inspeccionar los servicios de Windows en una computadora remota es utilizando Windows PowerShell Remoting (o PS Remoting). Usar PS Remoting puede encapsular cualquier comando local e invocarlo en una sesión remota como si lo estuviéramos haciendo localmente.
Asumiendo que tenemos habilitado PowerShell Remoting en una computadora remota, podríamos, por ejemplo, usar el cmdlet Invoke-Command
para ejecutar el comando Get-Service
en una computadora remota.
$cred = Get-Credential
Invoke-Command -ComputerName SRV1 -ScriptBlock { Get-Service } -Credential $cred
Salida:
Status Name DisplayName PSComputerName
------ ---- ----------- --------------
Stopped AarSvc_55244 AarSvc_55244 SRV1
<SNIP>
Una vez ejecutado, el cmdlet Invoke-Command
pasa toda la información que Get-Service
devolvió, y los servicios serían devueltos como se esperaba.
Nota la propiedad extra PSComputerName
devuelta por el cmdlet Invoke-Command
. También podemos crear un script simple para enumerar servicios en muchas computadoras remotas.
Iniciar y Detener Servicios en PowerShell
También podemos iniciar y detener servicios con Windows PowerShell.
Los cmdlets Start-Service
y Stop-Service
hacen precisamente lo que esperaríamos. A continuación, podemos usar la canalización o el parámetro -Name
a continuación.
## Stop a service
$serviceName = 'wuauserv'
Stop-Service -Name $serviceName
## Stop a service with the pipeline
Get-Service $wuauserv | Stop-Service
Todos los cmdlets *-Service
nos permiten completar los valores de nombre de servicio con los parámetros -Name
y -DisplayName
. Solo escribe el parámetro -Name
seguido de un espacio y presiona la tecla Tab
.
Veremos que recorre todos los servicios en la computadora local. El mismo concepto se aplica para iniciar también como un servicio.
## Start a service
$serviceName = 'wuauserv'
Start-Service -Name $serviceName
## Start service with the pipeline
Get-Service $wuauserv | Start-Service
Ambos comandos Start-Service
y Stop-Service
son idempotentes, lo que significa que si un servicio está iniciado o detenido y intentamos detener o iniciar el servicio cuando ya están en ese estado, los cmdlets omitirán el servicio.
Para detener e iniciar servicios remotos con PowerShell, nuevamente, necesitarás envolver estos comandos en un bloque de script y usar PowerShell Remoting para invocarlos de forma remota, como se muestra a continuación.
$cred = Get-Credential
$serviceName = 'wuauserv'
Invoke-Command -ComputerName SRV02 -ScriptBlock { Start-Service -Name $using:serviceName } -Credential $cred
Reiniciar Servicio en PowerShell
Para limitar la reutilización de código para reiniciar un servicio con Windows PowerShell, sería mejor usar el cmdlet Restart-Service
. Este cmdlet hace precisamente lo que pensamos y opera de manera similar a los otros comandos de servicio.
Por ejemplo, si nos gustaría iniciar y detener el servicio wuauserv
como se mostró en el ejemplo anterior, podríamos ahorrar algo de código simplemente canalizando la salida de Get-Service
directamente a Restart-Service
, como se muestra a continuación.
## Restart a service with the Name parameter
$serviceName = 'wuauserv'
Get-Service -Name $serviceName | Restart-Service
Cambiar el Tipo de Inicio de un Servicio en PowerShell
El tipo de inicio de un servicio es el atributo que dicta lo que los servicios hacen cuando Windows se inicia. Así que, nuevamente, tenemos algunas opciones.
Automático
: El servicio se inicia automáticamente cuando Windows se inicia.Deshabilitado
: El servicio nunca se iniciará a menos que se cambie.Manual
: El servicio puede ser iniciado, pero debe hacerse manualmente.Automático – Retrasado
: El servicio se inicia automáticamente, pero se retrasa una vez que Windows arranca.
Primero, necesitamos saber qué es un tipo de inicio. Puedes encontrar esto con Get-Service
.
Si estás usando Get-Service
para encontrar el tipo de inicio, encontrarás que Get-Service
lo llama Estado
y se representa como la propiedad Estado
.
(Get-Service -Name wuauserv | select *).StartType
Salida:
Manual
Una vez que sepas el tipo de inicio actual, podemos cambiarlo utilizando Set-Service
. El siguiente ejemplo establece el tipo de inicio en Automático
.
Set-Service -Name <service name> -StartupType Automatic
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn