Tema: powershell
-
Manejo de errores en PowerShell para scripts de administración: errores terminantes, $ErrorActionPreference y $LASTEXITCODE
PowerShell distingue dos clases de errores en un script: los terminantes, que try/catch puede interceptar, y los no terminantes, que solo $ErrorActionPreference o -ErrorAction pueden convertir en una detención. Una tercera clase, los fallos de ejecutables nativos, no sigue ninguno de esos caminos salvo que se active $PSNativeCommandUseErrorActionPreference (PowerShell 7.4+, experimental en 7.3).
-
Windows PowerShell 5.1 frente a PowerShell 7 en servidores: bajo qué motor se ejecuta realmente un script
PowerShell 7 se instala en paralelo con Windows PowerShell 5.1, que viene incluido en el sistema, en lugar de reemplazarlo, y usa otro nombre de ejecutable, otra ruta de módulos y otro endpoint de remoting. Si un agente ejecuta 'powershell.exe' cuando quería 'pwsh.exe' (o al revés), obtiene sin avisar el conjunto de módulos y los valores predeterminados del otro motor.
-
Preparar un disco nuevo en Windows Server: de Get-Disk a Format-Volume, y por qué empieza sin conexión
La secuencia del módulo Storage de PowerShell, de Get-Disk a un volumen montado y formateado — Initialize-Disk -PartitionStyle GPT, New-Partition -UseMaximumSize, Format-Volume, y su ampliación posterior con Get-PartitionSupportedSize — además de la directiva SAN que deja algunos discos recién conectados sin conexión por defecto.
-
Habilitar y usar PowerShell remoting: WinRM, TrustedHosts y el límite del segundo salto
Activar PowerShell remoting con Enable-PSRemoting, elegir entre TrustedHosts y transporte HTTPS, ejecutar comandos con Invoke-Command y Enter-PSSession, y el límite de delegación de credenciales conocido como el segundo salto.
-
Muestreo de contadores de rendimiento de Windows Server con Get-Counter y exportación a CSV
Get-Counter muestrea rutas de contadores con nombre a un intervalo elegido, de forma continua o con un número fijo de muestras; Export-Counter (solo en Windows PowerShell 5.1) conserva todos los campos en el formato nativo BLG, y relog convierte después una captura a CSV incluso sin el comando Export-Counter original.
-
Simulación y confirmación en scripts de administración: -WhatIf/-Confirm de PowerShell y un indicador --dry-run en shell
PowerShell incluye un mecanismo integrado, SupportsShouldProcess, que dota a una función propia de auténticos parámetros -WhatIf y -Confirm, conectados a la misma llamada $PSCmdlet.ShouldProcess() que usan los cmdlets integrados. Los scripts de shell no traen nada equivalente integrado, así que el indicador --dry-run hay que propagarlo a mano.
-
Cómo escribir scripts de administración idempotentes: comprobar antes de cambiar, archivos drop-in y comentarios marcadores
Un script de administración que un agente pueda volver a ejecutar tras un fallo parcial o por una programación repetida debe dejar el sistema en el mismo estado se ejecute una vez o cinco. Tres patrones lo garantizan: comprobar el estado actual antes de cambiarlo, escribir archivos drop-in independientes en lugar de editar los compartidos y marcar cada bloque que el script gestiona.
-
Instalar roles y características de Windows Server desde PowerShell sin acumular reinicios pendientes
Get-WindowsFeature e Install-WindowsFeature -IncludeManagementTools cubren la detección y la instalación, -Source apunta a medios de Features on Demand cuando el almacén local de componentes carece de los archivos, y el objeto devuelto indica a quien lo invoca si aún queda pendiente un reinicio.
-
Gestionar usuarios y grupos de Active Directory desde PowerShell sin recorrer todo el directorio
Get-ADUser con -Filter y -Properties, New-ADUser con una contraseña SecureString, Add-ADGroupMember, y Search-ADAccount/Unlock-ADAccount para los bloqueos de cuenta — además de por qué -Filter * es una trampa en un directorio con decenas de miles de objetos.
-
Ejecutar un comando como otro usuario desde un script: sudo -u, runuser, su -c y -Credential de PowerShell
sudo -u, runuser y su -c ejecutan un comando con otro ID de usuario y de grupo, pero se diferencian en si requieren la contraseña del usuario destino, si cargan un entorno de login y quién puede invocarlos; Start-Process y los cmdlets de remoting de PowerShell usan en su lugar un objeto -Credential, y a ninguno de ellos se le debe pasar nunca una contraseña por una tubería ni como argumento de línea de comandos.
-
Crear almacenamiento resiliente en un servidor independiente con Storage Spaces, y sustituir un disco averiado
New-StoragePool agrupa discos físicos, New-VirtualDisk con resiliencia Mirror o Parity, vigilar el estado con Get-PhysicalDisk y Get-StorageJob, y la secuencia documentada para sustituir un disco averiado sin perder el pool.
-
Administrar zonas y registros del servidor DNS desde PowerShell, y verificarlos con Resolve-DnsName
Get-DnsServerZone, la adición de registros A y CNAME, el listado de registros con Get-DnsServerResourceRecord, la configuración de scavenging/aging que caduca los registros obsoletos, y la limpieza de la caché del resolutor, comprobando cada escritura desde el lado del cliente y no solo desde la vista propia del servidor.
-
Fundamentos de administración de IIS desde PowerShell: sitios, grupos de aplicaciones, registros y copia de seguridad de la configuración
La lectura de sitios con Get-IISSite del módulo IISAdministration, el reciclado de un grupo de aplicaciones, la ubicación donde IIS escribe sus registros por defecto, y el uso de appcmd add backup para capturar applicationHost.config antes de un cambio de configuración.
-
Finales de línea, codificaciones y rutas: qué se rompe cuando un archivo se mueve entre sistemas operativos
CRLF frente a LF, los valores predeterminados de codificación inconsistentes de Windows PowerShell 5.1 frente al UTF-8 sin BOM de PowerShell 7, EBCDIC en sistemas de la familia de mainframes de IBM, y sistemas de archivos que difieren en la sensibilidad a mayúsculas/minúsculas y en la longitud máxima de ruta: una lista de comprobación de qué verificar antes de asumir que un archivo de texto o una ruta se comportan igual en otro sistema operativo.
-
Hyper-V desde PowerShell: máquinas virtuales, puntos de control y por qué un punto de control no es una copia de seguridad
Get-VM y la forma de una llamada a New-VM, la diferencia entre puntos de control Standard y Production, Export-VM para trasladar una VM, los servicios de integración, y el modificador -ExposeVirtualizationExtensions que activa la virtualización anidada.
-
Evitar ejecuciones simultáneas de un script de administración: flock, lockf y un mutex con nombre en Windows
Un script de administración programado o lanzado por un agente, que puede volver a iniciarse antes de que termine la ejecución anterior, necesita un bloqueo y no la esperanza de que eso no ocurra. flock(1) en Linux y lockf(1) en FreeBSD asocian un bloqueo consultivo a nivel de kernel a un proceso en ejecución, por lo que no puede quedar obsoleto como un archivo PID residual; en Windows se logra lo mismo con un System.Threading.Mutex con nombre.
-
Administrar el rol de servidor DHCP desde PowerShell: ámbitos, reservas, autorización y copia de seguridad
Get-DhcpServerv4Scope y las concesiones, la reserva de una dirección con Add-DhcpServerv4Reservation, la autorización de un servidor en AD con Add-DhcpServerInDC, una visión general de la conmutación por error, y la copia de seguridad de la configuración con Backup-DhcpServer antes de un cambio arriesgado.
-
Comparativa de elevación de privilegios: sudo, doas, UAC, runas y RBAC de AIX, y cómo detectarla
sudo, doas, UAC de Windows y el grupo admin de macOS responden todos a la misma pregunta —si esta sesión puede actuar como administrador— con mecanismos distintos y formas distintas de que un script compruebe la respuesta antes de intentar una acción privilegiada.
-
Comprobar el estado de Active Directory antes de hacer cualquier cambio: dcdiag, repadmin y los titulares de roles FSMO
Una rutina de comprobación de estado previa a un cambio para un controlador de dominio: dcdiag para diagnósticos locales, repadmin /replsummary y /showrepl para la replicación, Get-ADDomainController y netdom query fsmo para el inventario de controladores de dominio y titulares de roles, y por qué importa la fuente horaria del emulador de PDC.
-
Creación de una tarea programada con el módulo ScheduledTasks: acción, desencadenador, principal y códigos de resultado
New-ScheduledTaskAction, -Trigger y -Principal se combinan en una tarea que se registra con Register-ScheduledTask; ejecutarla como NT AUTHORITY\SYSTEM no requiere almacenar una contraseña, y Get-ScheduledTaskInfo junto con las constantes de resultado documentadas del Task Scheduler indican a un agente si la última ejecución realmente tuvo éxito.
Legible por máquina: JSON