Sistemas
PowerShell
Enlaces internos y contexto
- Sistemas
- Automatizacion
- script de hardening powershell
- script para comprobar puertos ocupados con powershell
- net
Estado y tareas
- Actualizar PowerShell a la versión 7
- Extensión Windows Terminal Integrator
- Crear script para parar servicios
- Configurar Oh My Posh en PowerShell (sin WSL)
- Zsh y Oh My Zsh en WSL info primeros pasos
- Oh My Posh en Git Bash
- Monitorizar red
- Gestionar perfiles y extensiones según lenguaje
PowerShell 7
- PowerShell 7 (pwsh) está basado en .NET (Core), es multiplataforma y reemplaza progresivamente a Windows PowerShell 5.1
- Permite mejor compatibilidad con herramientas modernas, módulos actualizados y scripting avanzado
- Convivencia:
- Windows PowerShell 5.1 (
powershell.exe) - PowerShell 7 (
pwsh.exe)
- Windows PowerShell 5.1 (
- Recomendado usar PowerShell 7 como shell por defecto en Windows Terminal
Personalización de PowerShell con Oh My Posh
- Oh My Posh permite personalizar el prompt con temas, iconos y contexto dinámico
- Uso sin WSL, directamente en Windows
- Instalación recomendada mediante Chocolatey
- Uso de fuentes Nerd Font para iconos y ligaduras
Instalación de Oh My Posh con Chocolatey
- Requiere Chocolatey previamente instalado
- Permite actualizaciones automáticas
Fuente FiraCode Nerd Font
- Mejora legibilidad del código
- Soporte para iconos y símbolos usados por Oh My Posh
- Fuente recomendada:
FiraCode Nerd Font Mono
Archivo de perfil de PowerShell
- El perfil permite ejecutar configuraciones automáticamente al iniciar PowerShell
- Ruta habitual:
$PROFILE
Crear perfil si no existe
New-Item -Path $PROFILE -Type File -Force
`
Editar perfil
code $PROFILE
Configuración de tema Oh My Posh
- Los temas se definen mediante archivos JSON
-
Se puede:
- Usar temas oficiales
- Crear un tema personalizado
- En el perfil se inicializa Oh My Posh apuntando al JSON del tema
- Añadir colores, iconos y secciones dinámicas (git, ruta, estado, tiempo)
Terminal Icons
- Añade iconos a la salida de
ls,diry otros comandos - Mejora la experiencia visual en consola
Enlace
Importar módulo
Import-Module Terminal-Icons
- Se recomienda añadir la importación al perfil para carga automática
Predicción de comandos (PSReadLine)
- PowerShell 7 incluye predicción inteligente basada en historial
- Mejora la productividad y reduce errores
Documentación oficial
Activar predicción en modo lista
Set-PSReadLineOption -PredictionViewStyle ListView
- Puede combinarse con colores personalizados
Configuración de fuente en Visual Studio Code
- Necesario para que los iconos se muestren correctamente en la terminal integrada
- Configuración en
settings.jsondel usuario
Ajuste recomendado
"editor.fontFamily": "FiraCode Nerd Font Mono"
PowerShell y Git Bash
- Uso de Oh My Posh como prompt unificado entre distintos shells en Windows
- Permite coherencia visual y funcional entre PowerShell y Git Bash
- Facilita la adopción de flujos mixtos (Windows + herramientas Unix)
- Requiere configuración específica del perfil de Git Bash:
- Inicialización manual de Oh My Posh en
.bashrco.bash_profile - Ajuste de la fuente Nerd Font en el emulador de terminal
- Compatibilidad parcial con algunos segmentos avanzados del prompt
- Inicialización manual de Oh My Posh en
- Recomendado para usuarios que trabajan con Git y scripts Bash sin WSL
PowerShell y WSL
- PowerShell puede convivir con zsh dentro de WSL sin interferencias
- Enfoque recomendado: separación clara de responsabilidades
- PowerShell:
- Automatización en Windows
- Administración del sistema
- Scripts de mantenimiento, hardening y gestión
- Zsh:
- Entorno Linux nativo
- Desarrollo de software
- Flujos DevOps, contenedores y cloud
- PowerShell:
- Integración habitual:
- PowerShell como shell principal en Windows Terminal
- Perfiles separados para cada distro WSL
- Evita mezclar lógica Windows/Linux en un mismo script
Monitorización de red
- Uso de herramientas CLI para diagnóstico rápido y reproducible
- Adecuado para:
- Troubleshooting
- Monitorización periódica
- Scripts de comprobación automática
Speedtest CLI
- Herramienta CLI para pruebas de conectividad
- Permite medir:
- Latencia
- Velocidad de descarga
- Velocidad de subida
- Útil para scripts de monitorización programada
- Integrable en PowerShell para:
- Registro de resultados en logs
- Exportación a CSV/JSON
- Alertas basadas en umbrales
- Puede ejecutarse de forma manual o automatizada (Task Scheduler)
Gestión de perfiles y extensiones por lenguaje
- Separar configuraciones según contexto de uso:
- PowerShell puro
- Desarrollo (Python, Node, Go, etc.)
- Administración de sistemas
- Uso recomendado de:
- Múltiples perfiles en Windows Terminal
- Condicionales en
$PROFILEsegún host, ruta o variables de entorno
- Beneficios:
- Entornos más limpios
- Menor carga innecesaria de módulos
- Mejor rendimiento
- Mayor claridad y mantenibilidad
Scripts en PowerShell
- Scripts reutilizables como base de la automatización
- Enfoque modular y mantenible
- Buenas prácticas:
- Uso de funciones bien definidas
- Manejo de errores con
try/catch - Logging estructurado
- Ejecución con privilegios controlados
- Comentarios y ayuda integrada (
Get-Help)
Script para parar servicios
- Útil para:
- Mantenimiento programado
- Hardening del sistema
- Troubleshooting
- Puede ampliarse con:
- Lista blanca y/o negra de servicios
- Confirmación interactiva antes de detener servicios críticos
- Ejecución remota sobre múltiples equipos
- Registro de acciones y estados finales
PowerShell 7 — Cheatsheet de comandos
Comandos básicos
pwsh→ Inicia PowerShell 7exit→ Cierra la sesión actualGet-Help <cmd>→ Ayuda de un comandoGet-Help <cmd> -Examples→ Ejemplos de usoUpdate-Help→ Actualiza la ayuda localGet-Command→ Lista todos los comandos disponiblesGet-Command *service*→ Busca comandos por nombreGet-Alias→ Lista aliasSet-Alias ll Get-ChildItem→ Crea un alias
Navegación por el sistema de archivos
Get-Location→ Directorio actualSet-Location <ruta>→ Cambiar directorioGet-ChildItem→ Listar archivos (alias:ls,dir)Get-ChildItem -Recurse→ Listado recursivoGet-ChildItem -Hidden→ Incluye ocultosNew-Item <nombre> -ItemType File→ Crear archivoNew-Item <nombre> -ItemType Directory→ Crear carpetaRemove-Item <ruta>→ EliminarRemove-Item <ruta> -Recurse -Force→ Eliminación forzadaCopy-Item origen destino→ CopiarMove-Item origen destino→ MoverRename-Item <archivo> <nuevo>→ Renombrar
Visualización y manipulación de contenido
Get-Content <archivo>→ Ver contenidoGet-Content <archivo> -Tail 20→ Últimas líneasSet-Content <archivo> "texto"→ Sobrescribir contenidoAdd-Content <archivo> "texto"→ Añadir contenidoClear-Content <archivo>→ Vaciar archivoOut-File <archivo>→ Redirigir salidaSelect-String "texto" <archivo>→ Buscar texto (similar a grep)
Pipes y filtrado
- Uso del pipe
| Where-Object→ FiltradoSelect-Object→ Selección de propiedadesSort-Object→ OrdenarMeasure-Object→ Medidas
Ejemplos de pipeline
Get-Process | Where-Object CPU -gt 100
`
Get-Service | Select-Object Name, Status
Get-ChildItem | Sort-Object Length -Descending
Gestión de procesos
Get-Process→ Lista procesosGet-Process -Name chrome→ Proceso específicoStop-Process -Id <pid>→ Detener procesoStop-Process -Name chrome -Force→ Forzar cierreStart-Process notepad.exe→ Iniciar procesoStart-Process cmd.exe -Verb RunAs→ Ejecutar como admin
Gestión de servicios
Get-Service→ Lista serviciosGet-Service | Where-Object Status -eq RunningStart-Service <nombre>Stop-Service <nombre>Restart-Service <nombre>Set-Service <nombre> -StartupType Disabled
Red y conectividad
Test-Connection <host>→ PingTest-NetConnection <host> -Port 443→ Test de puertoGet-NetIPAddress→ IPs del sistemaGet-NetAdapter→ Interfaces de redGet-NetTCPConnection→ Conexiones activasResolve-DnsName <dominio>→ DNS lookup
Gestión de usuarios y permisos
whoami→ Usuario actualGet-LocalUser→ Usuarios localesGet-LocalGroup→ Grupos localesAdd-LocalUser <nombre>Add-LocalGroupMember -Group Administrators -Member <usuario>Get-Acl <ruta>→ PermisosSet-Acl <ruta> <acl>
Variables y entorno
$variable = "valor"→ Crear variable$env:PATH→ Variable de entornoGet-Variable→ Lista variablesRemove-Variable <nombre>Get-ChildItem Env:→ Variables de entorno$PROFILE→ Ruta del perfil actual
Scripts y ejecución
.\script.ps1→ Ejecutar scriptGet-ExecutionPolicy→ Política actualSet-ExecutionPolicy RemoteSigned -Scope CurrentUserGet-Command -CommandType ScriptGet-History→ HistorialInvoke-History <id>→ Reejecutar comando
Funciones
Definir función
function Get-Hello {
Write-Output "Hola PowerShell"
}
Ejecutar función
Get-Hello
Manejo de errores
try { } catch { } finally { }$Error→ Errores recientes$?→ Último comando correcto/incorrectoThrow "mensaje de error"
Ejemplo
try {
Get-Item archivo.txt
} catch {
Write-Error "Archivo no encontrado"
}
Módulos
Get-Module→ Módulos cargadosGet-Module -ListAvailable→ Módulos instaladosInstall-Module <nombre>→ Instalar móduloImport-Module <nombre>→ Cargar móduloUpdate-Module <nombre>Remove-Module <nombre>
Formatos y salida
Format-Table→ TablaFormat-List→ ListaOut-GridView→ Vista gráficaConvertTo-JsonConvertFrom-JsonExport-Csv archivo.csv -NoTypeInformationImport-Csv archivo.csv
PowerShell Remoting
Enable-PSRemotingEnter-PSSession -ComputerName hostInvoke-Command -ComputerName host -ScriptBlock { Get-Process }Exit-PSSession
Tips rápidos
- Tab → Autocompletado
Ctrl + R→ Búsqueda en historialGet-Member→ Descubrir propiedades y métodos$_→ Objeto actual en pipelines--%→ Stop parsing (útil para comandos externos)
PowerShell 7 — Conceptos avanzados y temas complementarios
Tipos de datos y objetos .NET
- PowerShell trabaja nativamente con objetos .NET, no solo texto
- Cada comando devuelve objetos ricos en propiedades y métodos
- Permite:
- Acceso directo a clases .NET
- Conversión explícita de tipos
- Uso de métodos nativos
Uso de tipos .NET
[datetime]::Now
`
[System.IO.File]::ReadAllText("archivo.txt")
Clases en PowerShell
- PowerShell permite definir clases propias
-
Útil para:
- Scripts complejos
- Automatización estructurada
- Reutilización avanzada
Definición de clase
class Server {
[string]$Name
[string]$IP
Server($name, $ip) {
$this.Name = $name
$this.IP = $ip
}
}
Enumeraciones (Enums)
- Definen valores constantes legibles
- Mejoran claridad y validación
enum EnvironmentType {
Dev
Test
Prod
}
Parámetros avanzados
- Permiten crear scripts y funciones profesionales
-
Soportan:
- Validación
- Parámetros obligatorios
- Valores por defecto
Ejemplo
param (
[Parameter(Mandatory)]
[string]$Path,
[ValidateSet("Start","Stop","Restart")]
[string]$Action
)
Cmdlets avanzados y Common Parameters
-
Todos los cmdlets soportan parámetros comunes:
-Verbose-Debug-WhatIf-Confirm
-
Permiten pruebas seguras y debugging
Stop-Service Spooler -WhatIf
Background Jobs
- Ejecución asíncrona de tareas
-
Útil para:
- Scripts largos
- Operaciones en paralelo
Jobs
Start-Job { Get-Process }
Get-Job | Receive-Job
Parallelismo (ForEach-Object -Parallel)
- Disponible en PowerShell 7+
- Permite ejecución concurrente
1..10 | ForEach-Object -Parallel {
Start-Sleep 1
}
Acceso a APIs REST
- PowerShell es ideal para automatizar APIs
- Soporta JSON de forma nativa
Invoke-RestMethod -Uri https://api.github.com
Seguridad y hardening en PowerShell
- Firmado de scripts
- Restricción de ejecución
- Control de credenciales
Firmado de scripts
Set-AuthenticodeSignature script.ps1 $cert
Gestión segura de credenciales
- Evitar credenciales en texto plano
- Uso de SecureString y Credential Objects
$cred = Get-Credential
PowerShell y CI/CD
-
Integración directa con pipelines
-
Uso frecuente en:
- GitHub Actions
- Azure DevOps
- GitLab CI
-
Casos de uso:
- Build
- Test
- Deploy
- Validaciones de infraestructura
PowerShell Desired State Configuration (DSC)
- Declarar el estado deseado de un sistema
- Automatiza configuración y cumplimiento
-
Casos comunes:
- Servicios
- Features
- Configuración de sistema
PowerShell y contenedores
- Administración de Docker desde PowerShell
- Automatización de imágenes y contenedores
- Uso frecuente en entornos híbridos Windows/Linux
Logging avanzado
-
Separar niveles de log:
- Info
- Warning
- Error
-
Escritura estructurada:
- JSON
- CSV
- Event Viewer
Write-EventLog -LogName Application -Source PowerShell -EntryType Error -Message "Error crítico"
Testing con Pester
- Framework de testing para PowerShell
-
Permite:
- Tests unitarios
- Validación de scripts
- Control de regresiones
Describe "Test básico" {
It "Debe ser verdadero" {
$true | Should -BeTrue
}
}
Gestión de versiones y compatibilidad
- Detección de versión activa
$PSVersionTable
-
Scripts compatibles:
- Windows PowerShell 5.1
- PowerShell 7+
PowerShell como lenguaje de propósito general
-
No solo administración:
- Automatización
- Integración
- Procesamiento de datos
- Orquestación de sistemas
-
Especialmente potente en entornos híbridos Windows/Linux
Buenas prácticas avanzadas
- Un script = una responsabilidad clara
- Uso de módulos propios
- Versionado de scripts
- Documentación integrada
- Revisión de código
- Separación lógica (core, helpers, config)
¿Te gusta este contenido? Suscríbete vía RSS