EFT-and-cloud-survey-finding.jpg

Usando Los Servicios De Windows En PowerShell

Usando Los Servicios De Windows En PowerShell

PowerShell nos ahorra mucho tiempo haciendo ciertas tareas de administración al servicio. Aquí aprenderá como crear esas herramientas.

Parar, iniciar y reiniciar servicios de Windows son tareas bastante comunes para muchos profesionales de TI. Estamos acostumbrados a los servicios comunes snapin MMC cuando buscamos un servicio, haga click derecho en el servicio, reinícielo o haga doble click para cambiar varios atributos. Si estamos intentando ahorrar tiempo, podríamos conectarnos a una computadora remota en los servicios snapin y administrarlos de esa manera, pero este método de usar los servicios de Windows se convierte en una pesadilla rápidamente.

El proceso envejece, y desperdicia el tiempo preciado de un profesional de TI, dando clicks en la interfaz gráfica de usuario (GUI) al administrar diversos servicios. Por suerte, al usar PowerShell, podemos crear herramientas para realizar varias de estas tareas de automáticamente.

Primeramente, PowerShell nos proporciona con algunos comandos para usar los servicios de Windows.

PS> Get-Command -Noun Service

CommandType Name            Version Source
----------- ----            ------- ------
Cmdlet      Get-Service     3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      New-Service     3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Restart-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Resume-Service  3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Set-Service     3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Start-Service   3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Stop-Service    3.1.0.0 Microsoft.PowerShell.Management
Cmdlet      Suspend-Service 3.1.0.0 Microsoft.PowerShell.Management

Podemos aprovechar los comandos incluidos para realizar todo tipo de trabajos, y así facilitar nuestra labor de administrar los servicios. Por ejemplo, a lo mejor quiero ver el estatus de servicio de varias computadoras a la vez desde el directorio activo (Active Directory). Para crear esa herramienta, podría aprovechar el modelo del Active Directory de PowerShell, sacar las computadoras del AD, y después darle los nombres de las computadoras al comando Get-Service.

$computers = Get-AdComputer -Filter * | Select-Object -ExpandProperty Name
get-service -ComputerName $computers -Name wuauserv | Select-Object MachineName,Name,Status

MachineName Name      Status
----------- ----      ------
DC          wuauserv Running
CLIENT1     wuauserv Running
...

Ahora, a lo mejor quiero reiniciar todos los servicios de las computadoras al mismo tiempo. Para hacer eso, puedo canalizar los resultados que acaba de obtener a Restart-Service. 

Get-Service -ComputerName $computers -Name wuauserv | Restart-Service

Podríamos usar el mismo método para iniciar o parar los servicios. En vez de usar Restart-Service, pude haber usado Stop-Service Start-Service que son igual de fáciles.

Los servicios también pueden ser modificados con el comando Set-Service. Con el comando Set-Service, puedo hacer cosas como cambiar el nombre de la pantalla de servicio, a tipo startup o de descripción. De nuevo, al usar los servicios que obtuvimos en el Get-Service de antes, puedo canalizar esos servicios al comando Set-Service para realizar otras acciones.

## Change the display name for all wuauserv services to 'foo'
Get-Service -ComputerName $computers -Name wuauserv | Set-Service -DisplayName 'foo'

## Change the description to 'stuff'
Get-Service -ComputerName $computers -Name wuauserv | Set-Service -Description 'stuff'

Puede darse cuenta que cuando consulta los servicios con Get-Service, básicamente se puede hacer cualquier cosa a los servicios. Sin embargo, no todo se puede hacer con los comandos incluidos. Por ejemplo, no se puede cambiar el usuario y la contraseña de algún servicio utilizando los comandos. En cambio, tenemos que usar nuestro propio método usando el Instrumental de administración de Windows (WMI). Para cambiar la acreditación, tenemos que sacar el servicio directamente de WMI e invocar el método .NET para modificar la cuenta del servicio. Aquí le enseno un excelente ejemplo.

## Gather the username and password
$credential = Get-Credential

## Find the service to change
$params = @{
  'Namespace' = 'root\CIMV2'
  'Class' = 'Win32_Service'
  'Filter' = "DisplayName='App Service'"
}
$service = Get-WmiObject @params

## Make the change using the username and password
$service.Change($null,
  $null,
  $null,
  $null,
  $null,
  $null,
  $credential.UserName,
  $credential.GetNetworkCredential().Password,
  $null,
  $null,
  $null
)

Aunque no todo sea posible usando los comándulos incluidos, ya que PowerShell está incluido encima del .NET, ¡Casi todo se puede hacer si sabe en dónde buscar!

 

Comments
Comments are disabled in preview mode.
Loading animation