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 o 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!
Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.
Deje que nuestros expertos le enseñen cómo utilizar las mejores funciones de Sitefinity para ofrecer experiencias digitales atractivas.
Aprende másSuscríbete para recibir todas las noticias, información y tutoriales que necesitas para crear mejores aplicaciones y sitios de negocios