¿Cómo administrar los servicios de Windows con PowerShell?

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

cmdlets básicos de powershell para administrar los servicios de Windows

  • 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

Consigue ayuda

¿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 *.

Verifique el estado del servicio de Windows con Get-Service

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.

powershell obtener servicios

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 *

Propiedades de Get-Service

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*

Estado de obtención del servicio

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

Servicios necesarios para obtener servicio

El siguiente comando muestra los servicios que dependen de Spooler:

Get-Service –Name Spooler -DependentServices

Obtener servicios dependientes del servicio

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'}

Get-Service: lista de servicios en ejecución

Para mostrar los servicios con el tipo de inicio manual, ejecute este comando:

Get-Service | Where-Object {$_.starttype -eq 'Manual'}

obtener servicio con el tipo de inicio 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.

Pase de parada de servicio

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.

No se puede detener el servicio porque tiene servicios dependientes. Solo se puede detener si se activa la bandera de fuerza.

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

detener los servicios en el estado de ejecución

A veces, los servicios cuelgan en el estado «Deteniendo» y tienen que ser asesinados a la fuerza.

los Comienza el servicio cmdlet inicia un servicio detenido:

Start-Service -Name spooler -PassThru

Comienza el servicio

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}

powershell inicia un servicio con todas las dependencias

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

Get-Service puede pausar y continuar

Para mostrar la lista de todos los servicios que pueden estar en pausa, ejecute este comando:

Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

obtenga servicio con la opción canpauseandcontinue

Suspendamos el servicio SQLBrowser:

Suspend-Service -Name SQLBrowser

Suspender-Servicio

Para reanudar un servicio suspendido, utilice el Servicio de reanudación cmdlet:

Resume-Service -Name SQLBrowser

Servicio de reanudación

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

Reiniciar servicio

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

cambiar el tipo de inicio de la cola de impresión a Automático

Puede configurar el tipo de inicio manual:

Set-Service spooler –startuptype manual –passthru

establecer el tipo de inicio manual Set-Service

¿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"

servicio de creación de nuevo servicio con powershell

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""

get-wmiobject win32_service

Puede cambiar la configuración del nuevo servicio usando el siguiente comando:

Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual

cambiar el tipo de inicio del servicio a 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

obtener la cuenta de usuario para ejecutar el servicio

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.

cambiar la cuenta de usuario runas de un servicio de Windows

$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