Fundamentos
Comandos y Ayuda
Get-Help Get-Process # show help for cmdlet Get-Help Get-Process -Online # open online docs Get-Command *service* # find commands by name Get-Alias ls # show alias target
Alias Comunes
ls → Get-ChildItemListar archivos y directorios
cd → Set-LocationCambiar directorio
cp → Copy-ItemCopiar archivo o directorio
mv → Move-ItemMover o renombrar
rm → Remove-ItemEliminar archivo o directorio
cat → Get-ContentLeer contenido del archivo
echo → Write-OutputImprimir al pipeline
cls → Clear-HostLimpiar la consola
Variables
Básicos de Variables
$name = "Alice" # string $count = 42 # integer $pi = 3.14 # double $list = @(1, 2, 3) # array $hash = @{a=1; b=2} # hashtable
Variables Automáticas
$_Objeto actual del pipeline
$PSVersionTableInformación de versión de PowerShell
$HOMEDirectorio de inicio del usuario
$PWDDirectorio actual
$nullValor nulo
$true / $falseConstantes booleanas
$ErrorArray de errores recientes
$LASTEXITCODECódigo de salida del último comando nativo
Variables de Entorno
$env:PATH # read env var $env:MY_VAR = "value" # set env var Get-ChildItem Env: # list all env vars
Operadores
Operadores de Comparación
-eq -neIgual / no igual
-gt -ltMayor / menor que
-ge -leMayor/menor o igual
-like -notlikeCoincidencia con comodín (*, ?)
-match -notmatchCoincidencia con regex
-containsLa colección contiene el valor
-in -notinValor en la colección
Operadores Lógicos y Otros
-and -or -notOperadores lógicos
!NOT lógico (alias)
-replaceReemplazo con regex: 'hi' -replace 'h','b'
-split -joinDividir / unir cadenas
..Rango: 1..5 → 1,2,3,4,5
?:Ternario (v7+): $x ? 'yes' : 'no'
Flujo de Control
if / elseif / else
if ($age -ge 18) { "Adult" } elseif ($age -ge 13) { "Teen" } else { "Child" }
switch
switch ($color) { "red" { "Stop" } "green" { "Go" } default { "Unknown" } }
Bucles
foreach ($item in $list) { $item } for ($i=0; $i -lt 5; $i++) { $i } while ($x -lt 10) { $x++ } 1..5 | ForEach-Object { $_ * 2 }
Funciones
Definir Funciones
function Get-Greeting { param([string]$Name = "World") "Hello, $Name!" } Get-Greeting -Name "Alice"
Parámetros Avanzados
function Copy-SafeFile { [CmdletBinding()] param( [Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][string]$Dest ) Copy-Item $Path $Dest -WhatIf:$WhatIfPreference }
Objetos y Pipeline
Básicos del Pipeline
Get-Process | Sort-Object CPU -Desc | Select-Object -First 5 Get-Service | Where-Object Status -eq "Running" Get-ChildItem | Measure-Object -Property Length -Sum
Cmdlets Clave del Pipeline
Where-ObjectFiltrar objetos: | Where {$_.CPU -gt 10}
Select-ObjectElegir propiedades: | Select Name, CPU
Sort-ObjectOrdenar: | Sort CPU -Desc
ForEach-ObjectTransformar cada uno: | ForEach {$_.Name}
Measure-ObjectContar, sumar, promedio, mín, máx
Group-ObjectAgrupar por valor de propiedad
Format-TableMostrar como tabla: | ft -Auto
Export-CsvExportar a CSV: | Export-Csv out.csv
Archivos
Operaciones con Archivos
Get-Content log.txt # read file Set-Content out.txt "hello" # write (overwrite) Add-Content out.txt "more" # append Get-Content log.txt | Select-String "error" # grep
Cmdlets de Ruta y Archivo
Test-Path $pathVerificar si el archivo/dir existe
New-Item -Type FileCrear archivo
New-Item -Type DirectoryCrear directorio
Resolve-PathObtener ruta absoluta
Join-PathCombinar segmentos de ruta
Split-PathObtener padre o hoja
Get-ItemPropertyAtributos y metadatos del archivo
Remove-Item -RecurseEliminar directorio recursivamente
Cadenas
Básicos de Cadenas
"Hello, $name" # interpolation (double quotes) 'Hello, $name' # literal (single quotes) "Length: $($list.Count)" # expression in string @" Multi-line here-string with $name "@
Métodos de Cadenas
.ToUpper() / .ToLower()Cambiar mayúsculas/minúsculas
.Trim()Eliminar espacios al inicio y final
.Split(',')Dividir en array
.Replace('a','b')Reemplazar subcadena
.StartsWith() / .EndsWith()Verificar prefijo / sufijo
.Substring(0,5)Extraer subcadena
.Contains('text')Verificar si contiene
-f operator'{0} is {1}' -f 'sky','blue'
Módulos
Gestión de Módulos
Get-Module -ListAvailable # installed modules Find-Module -Name Az* # search gallery Install-Module -Name Pester # install from gallery Import-Module ActiveDirectory # load module
Comandos de Módulos
Get-ModuleListar módulos cargados
Import-ModuleCargar módulo en la sesión
Remove-ModuleDescargar módulo de la sesión
Update-ModuleActualizar módulo instalado
Get-Command -Module XListar comandos del módulo
$env:PSModulePathRutas de búsqueda de módulos
Patrones Comunes
Manejo de Errores
try { Get-Item "C:\missing" -ErrorAction Stop } catch { "Error: $_" } finally { "Cleanup here" }
Política de Ejecución y Remoting
Get-ExecutionPolicyMostrar política de scripts actual
Set-ExecutionPolicy RemoteSignedPermitir scripts locales
Enter-PSSession -Computer SRV1Sesión remota interactiva
Invoke-Command -Computer SRV1 -Script {}Ejecutar bloque de script remotamente
Start-Job { long-task }Ejecutar trabajo en segundo plano
Receive-Job -Id 1Obtener salida del trabajo en segundo plano