Puede administrar los servicios de Windows no solo desde el complemento services.msc o la herramienta de línea de comandos sc.exe, sino también mediante PowerShell. En este artículo, consideraremos diferentes escenarios de administración de servicios de Windows con PowerShell.
Cmdlets de PowerShell utilizados para administrar servicios de Windows
Hay ocho cmdlets de servicio básicos para ver el estado de los servicios de Windows y administrarlos. Para obtener la lista completa de cmdlets de administración de servicios, ejecute este comando:
Get-Help *-Service
- Obtener servicio – permite obtener los servicios en una computadora local o remota tanto en estado de ejecución como detenido;
- Nuevo servicio – crea un servicio. El cmdlet crea una nueva entrada para un servicio de Windows en el registro y en la base de datos del servicio;
- Reiniciar servicio – reinicia un servicio. El cmdlet envía el mensaje de reinicio a través del controlador de servicio de Windows;
- Servicio de reanudación – reanuda un servicio. El cmdlet envía un mensaje de reanudación al Administrador de servicios de Windows;
- Set-Servicio – cambia la configuración de un servicio local o remoto, incluido su estado, descripción, nombre mostrado o modo de inicio. También puede usar este cmdlet para iniciar, detener o suspender un servicio;
- Comienza el servicio – inicia un servicio;
- Parada de servicio – detiene un servicio (el cmdlet envía un mensaje de detención al Administrador de servicios de Windows);
- Suspender-Servicio – suspende un servicio. Un servicio suspendido todavía se está ejecutando, pero no hace nada hasta que se reanuda con el uso (por ejemplo, con el cmdlet Resume-Service).
Puede obtener una descripción detallada y ejemplos del uso de un cmdlet en particular con Get-Help:
Get-Help Start-Service
¿Cómo comprobar el estado del servicio de Windows con Get-Service?
Puede obtener la lista de servicios y su estado (En ejecución / Detenido) en una computadora local o remota usando el Obtener servicio cmdlet. Los –Nombre El parámetro permite seleccionar servicios por nombre. El nombre del servicio se puede especificar mediante el carácter comodín *
.
Si no conoce el nombre exacto del servicio, puede buscarlo por el nombre que se muestra usando el –Nombre para mostrar parámetro. Puede utilizar la lista de valores y comodines.
Utilizar el Obtener servicio cmdlet con el -Nombre del computador parámetro para obtener el estado del servicio en una computadora remota. Puede consultar el estado del servicio en varios equipos remotos a la vez especificando sus nombres separados por comas. Por ejemplo, el comando que se muestra a continuación obtiene el estado del servicio Spooler en las computadoras remotas ny-prnt1 y ny-prnt2.
Get-Service spooler –ComputerName ny-prnt1,ny-prnt2
Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped spooler Print Spooler
Para mostrar todas las propiedades de un servicio, use el Seleccionar objeto cmdlet:
Get-Service spooler | Select-Object *
El cmdlet Select-Object permite obtener propiedades específicas de un servicio. Por ejemplo, desea ver el nombre, el estado y las opciones disponibles del servicio Spooler:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*
los Obtener servicio cmdlet tiene dos parámetros que le permiten ver las dependencias del servicio:
- -Servicios dependientes permite mostrar los servicios que dependen del servicio dado
- -RequiredServices muestra los servicios de los que depende el servicio dado
El siguiente comando muestra los servicios necesarios para iniciar el servicio Spooler:
Get-Service –Name Spooler -RequiredServices
El siguiente comando muestra los servicios que dependen de Spooler:
Get-Service –Name Spooler -DependentServices
Si desea encontrar los servicios con el estado o los parámetros específicos, utilice el Objeto donde cmdlet. Por ejemplo, obtengamos la lista de servicios en ejecución:
Get-Service | Where-Object {$_.status -eq 'running'}
Para mostrar los servicios con el tipo de inicio manual, ejecute este comando:
Get-Service | Where-Object {$_.starttype -eq 'Manual'}
Utilice el siguiente script de PowerShell para comprobar si existe un servicio de Windows específico en una computadora actual:
if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}
¿Cómo detener, iniciar o reiniciar el servicio con PowerShell?
Puede detener un servicio utilizando el Parada de servicio cmdlet. Para detener el Spooler, ejecute el comando:
Stop-Service -Name spooler
El cmdlet Stop-Service no muestra nada después de la ejecución. Para ver el resultado, use el -Pasar a través de parámetro.
Tenga en cuenta que no todos los servicios se pueden detener. Si hay servicios dependientes, verá un error:
Cannot stop service because it has dependent services. It can only be stopped if force flag set.
Para forzar la detención de un servicio, utilice el -Fuerza parámetro. Debe recordar que todos los servicios dependientes también se detendrán:
Stop-Service samss –Force -Passthru
El siguiente comando detendrá los servicios especificados (bits, spooler) si están en estado «En ejecución»:
get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru
los Comienza el servicio cmdlet inicia un servicio detenido:
Start-Service -Name spooler -PassThru
Un servicio no se iniciará si se detiene alguno de sus servicios dependientes. Para encontrarlos e iniciarlos, use el siguiente resumen de PowerShell:
get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}
los Suspender-Servicio cmdlet puede pausar los servicios si admiten este estado. Para saber si se puede suspender un servicio, utilice el Obtener servicio cmdlet con el CanPauseAndContinue propiedad.
Get-Service samss | Format-List name, canpauseandcontinue
Para mostrar la lista de todos los servicios que pueden estar en pausa, ejecute este comando:
Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}
Suspendamos el servicio SQLBrowser:
Suspend-Service -Name SQLBrowser
Para reanudar un servicio suspendido, utilice el Servicio de reanudación cmdlet:
Resume-Service -Name SQLBrowser
El siguiente comando reanudará todos los servicios suspendidos:
get-service | where-object {$_.Status -eq "Paused"} | resume-service
los Reiniciar servicio cmdlet reiniciará un servicio:
Restart-Service -Name spooler
Este comando inicia todos los servicios de red detenidos en una computadora:
get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service
Estos comandos no tienen la –Nombre del computador , pero puede ejecutarlos en un equipo remoto mediante el cmdlet Invoke-Command o una canalización.
Por ejemplo, para reiniciar una cola de impresión en la computadora remota ny-prnt1, ejecute el comando:
Get-Service Spooler -ComputerName ny-prnt1 | Start-Service
Uso de Set-Service para cambiar la configuración del servicio
los Set-Servicio cmdlet le permite cambiar cualquier parámetro o configuración de un servicio en una computadora local o remota. Dado que el estado de un servicio es una propiedad, puede usar este cmdlet para iniciar, detener o suspender un servicio. Servicio de set tiene el -StartupType parámetro que permite cambiar el tipo de inicio de un servicio.
Cambiemos el tipo de inicio de Spooler a automático:
Set-Service spooler –startuptype automatic –passthru
Puede configurar el tipo de inicio manual:
Set-Service spooler –startuptype manual –passthru
¿Cómo crear o eliminar un servicio de Windows a través de PowerShell?
Nuevo servicio – es un cmdlet para crear un nuevo servicio en Windows. Especifique el nombre y el archivo ejecutable para el nuevo servicio (incluso puede ejecutar un script de PowerShell como un servicio de Windows).
Creemos un nuevo servicio con el nombre TestSvc:
new-service -name TestSvc -binaryPathName "C:WINDOWSSystem32svchost.exe -k netsvcs"
Obtenga la información sobre el tipo de inicio y la descripción del servicio mediante el cmdlet Get-WmiObject.
get-wmiobject win32_service -filter "name="testservice""
Puede cambiar la configuración del nuevo servicio usando el siguiente comando:
Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual
Para eliminar un servicio, ejecute este comando:
(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()
Cambiar la cuenta de usuario que ejecuta el servicio de Windows
Puede utilizar PowerShell para cambiar la cuenta de usuario utilizada para iniciar un servicio. Obtenga el nombre de la cuenta utilizada para iniciar TestSvc:
get-wmiobject win32_service -filter "name="TestSvc"" | Select name,startname
Para cambiar el nombre de usuario y la contraseña de un servicio de Windows, ejecute los siguientes comandos:
$svc = get-wmiobject win32_service -filter "name="TestSvc""
$svc.GetMethodParameters("change")
Se muestra la lista de parámetros del método Change (). Cuente dónde están los parámetros StartName y StartPassword: se encuentran en el 20th y 21S t lugares respectivamente.
$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")
O puede ingresar el nombre de una cuenta gMSA (la contraseña de la cuenta no se especifica en este caso).
Como puede ver, PowerShell facilita la administración de los servicios de Windows. Puede crear, detener, iniciar o reanudar servicios y cambiar sus propiedades. La mayoría de los cmdlets permiten administrar servicios en equipos remotos.
Artículos Interesantes
Relacionados:
Contenido