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