lunes, 26 de octubre de 2020

Powershell para administrar servidores Windows

 

Empiezo a administrar servidores Microsoft SQL Server y me planteo qué lenguaje de scripts utilizar para automatizar su gestión, más allá del propio TSQL.

Después de consultar por internet y al área de sistemas informáticos de mi organización, nos decantamos por Powershell. Una de las ventajas claras que le hemos visto, más allá de que está realmente muy extendido en las organizaciones de mediana y gran envergadura, es que viene preinstalado en todas las máquinas que llevan el sistema operativo de Redmond. El resultado es que no he hecho sino empezar, pero mis primeras impresiones son muy buenas.


Algunos comandos del sistema de archivos

Get-ChildItem gc, dir, ls
Set-Location cd, sl
mkdir
Remove-Item rm, del
New-Item ni Crea un nuevo archivo. Es como el touch de Linux
Copy-Item cp, copy
Move-Item move
Write-Output echo, write
Get-Content gc, cat, type
Select-String sls Es como un grep de Linux
Get-Help
Measure-Object Measure Cuenta palabras, caracteres, líneas,... de un fichero de texto.
Cuenta ficheros y carpetas de una carpeta,...
Mide objetos

Pantalla principal de Powershell ISE


Obtener actualizaciones pendientes de Windows Update desde Powershell
Casi todo, por no decir todo, lo que podemos hacer desde la interfaz gráfica de Windows se puede hacer mediante comandos a través de Powershell.
En este caso, mostramos las actualizaciones pendientes en mi equipo primero en modo gráfico y luego veremos cómo obtener esta misma información desde PS:

Actualizaciones que tiene pendiente mi equipo por instalar. Obtenidas desde la GUI del Sistema Operativo

Script para obtener el listado de actualizaciones pendientes:

$UpdateSession = New-Object -ComObject Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateupdateSearcher() $Updates = @($UpdateSearcher.Search("IsHidden=0 and IsInstalled=0").Updates) $Updates | Select-Object Title


La misma información obtenida desde PS



La misma prueba en otro equipo que NO tiene pendientes actualizaciones

La misma información pero desde Powershell. Vemos que tiene 0 actualizaciones pendientes


Comprobar si hay una aplicación X instalada o no en el servidor
Powershell es una herramienta realmente muy potente en la administración de sistemas basados en Windows. En este caso, queremos comprobar en todos los servidores de la organización si está instalado SQL Server 2012.

De nuevo, veamos cómo hacerlo de forma gráfica para luego ver el equivalente en PS.

Listado de programas y aplicaciones instalados. Se muestra claramente SQL Server 2012.



Script Powershell para ver si este programa está instalado:
$software = "Microsoft SQL Server 2012 (64-bit)"
$installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
If(-Not $installed) {
Write-Host "'$software' NOT is installed.";
} else {
Write-Host "'$software' is installed."
}


Búsqueda mediante PS de SQL Server 2012 en la relación de programas instalados