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