Administración de servicios

Este ejemplo solo se aplica a Windows PowerShell 5.1.

Existen ocho cmdlets Service principales, diseñados para una amplia variedad de tareas de servicio. En este artículo solo se examina la enumeración y el cambio del estado de ejecución de los servicios. Puede obtener una lista de cmdlets de servicio mediante Get-Command *-Service. Puede encontrar información sobre cada cmdlet mediante Get-Help <Cmdlet-Name>, como Get-Help New-Service.

Obtención de servicios

Puede obtener los servicios en un equipo local o remoto mediante el cmdlet Get-Service. Del mismo modo que ocurre con Get-Process, si usa el comando Get-Service sin parámetros, se devolverán todos los servicios. Puede filtrar por nombre, incluso con un asterisco como carácter comodín:

PS> Get-Service -Name se*

Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

Dado que no siempre es evidente cuál es el nombre real del servicio, es posible que necesite buscar servicios por el nombre para mostrar. Puede buscar por el nombre específico, usar caracteres comodín o proporcionar una lista de nombres para mostrar:

PS> Get-Service -DisplayName se*

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center

PS> Get-Service -DisplayName ServiceLayer, Server

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

Obtención de servicios remotos

Con Windows PowerShell, puede usar el parámetro ComputerName del cmdlet Get-Service para obtener los servicios en equipos remotos. El parámetro ComputerName acepta varios valores y caracteres comodín, por lo que puede obtener los servicios en varios equipos con un solo comando. Por ejemplo, el siguiente comando obtiene los servicios en el equipo remoto Server01.

Get-Service -ComputerName Server01

A partir de PowerShell 6.0, los cmdlets *-Service no tienen el parámetro ComputerName. Puede seguir obteniendo servicios en equipos remotos con la comunicación remota de PowerShell. Por ejemplo, el siguiente comando obtiene los servicios en el equipo remoto Server02.

Invoke-Command -ComputerName Server02 -ScriptBlock { Get-Service }

También puede administrar los servicios con los otros cmdlets *-Service. Para más información sobre la comunicación remota de PowerShell, consulte about_Remote.

Obtención de servicios necesarios y dependientes

El cmdlet Get-Service tiene dos parámetros que son muy útiles para la administración de servicios. El parámetro DependentServices obtiene servicios que dependen del servicio.

El parámetro RequiredServices obtiene servicios de los que depende este servicio el servicio LanmanWorkstation.

PS> Get-Service -Name LanmanWorkstation -RequiredServices

Status   Name               DisplayName
------   ----               -----------
Running  MRxSmb20           SMB 2.0 MiniRedirector
Running  bowser             Bowser
Running  MRxSmb10           SMB 1.x MiniRedirector
Running  NSI                Network Store Interface Service

El parámetro DependentServices obtiene el servicio LanmanWorkstation necesario.

PS> Get-Service -Name LanmanWorkstation -DependentServices

Status   Name               DisplayName
------   ----               -----------
Running  SessionEnv         Terminal Services Configuration
Running  Netlogon           Netlogon
Stopped  Browser            Computer Browser
Running  BITS               Background Intelligent Transfer Ser...

El siguiente comando obtiene todos los servicios que tienen dependencias. El cmdlet Format-Table para mostrar las propiedades Status, Name, RequiredServices y DependentServices de los servicios.

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

Detención, inicio, suspensión y reinicio de los servicios

Todos los cmdlets Service tienen el mismo formato general. Los servicios pueden especificarse por el nombre común o el nombre para mostrar, y toman listas y caracteres comodín como valores. Para detener el administrador de trabajos de impresión, use:

Stop-Service -Name spooler

Para iniciar el administrador de trabajos de impresión una vez detenido, use:

Start-Service -Name spooler

Para suspender el administrador de trabajos de impresión, use:

Suspend-Service -Name spooler

El cmdlet Restart-Service funciona de la misma manera que los otros cmdlets Service:

PS> Restart-Service -Name spooler

WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

Observará que obtiene un mensaje de advertencia repetido sobre el inicio del administrador de trabajos de impresión. Si realiza una operación de servicio que tarda bastante tiempo, PowerShell le notifica que todavía está intentando realizar la tarea.

Si desea reiniciar varios servicios, puede obtener una lista de estos, filtrarlos y, después, ejecutar el reinicio:

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service

WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : can't stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

Estos cmdlets Service no tienen un parámetro ComputerName, pero se pueden ejecutar en un equipo remoto mediante el cmdlet Invoke-Command. Por ejemplo, el siguiente comando reinicia el servicio de administrador de trabajos en cola en el equipo remoto Server01.

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

Establecimiento de las propiedades del servicio

El cmdlet Set-Service cambia las propiedades de un servicio en un equipo local o remoto. Dado que el estado del servicio es una propiedad, puede usar este cmdlet para iniciar, detener y suspender un servicio. El cmdlet Set-Service también tiene un parámetro StartupType que permite cambiar el tipo de inicio del servicio.

Para usar Set-Service en Windows Vista y en versiones posteriores de Windows, abra PowerShell con la opción Ejecutar como administrador.

Para obtener más información, consulte Set-Service

Consulte también