Cheatsheet PowerShell
Shell de automação e scripting da Microsoft
PowerShell
26
tarjetas encontradas
Categorías:
Versiones:
Comandos Básicos
Navegación
Get-Location # pwd
Set-Location C:\ # cd
Get-ChildItem # ls / dir
Get-ChildItem -Recurse -Filter *.ps1
Moverse por el sistema.
Ayuda
Get-Help Get-Process
Get-Help Get-Process -Examples
Get-Command *service*
Get-Member -InputObject "texto"
Descubrir comandos.
Aliases comunes
ls → Get-ChildItem
cd → Set-Location
cat → Get-Content
cp → Copy-Item
mv → Move-Item
rm → Remove-Item
Atajos familiares.
Historial y ejecución
Get-History
Invoke-History 5 # re-ejecutar #5
Start-Transcript # grabar sesión
Stop-Transcript
Historial y logging.
Pipeline e Objetos
Pipeline
Get-Process | Where-Object {
$_.CPU -gt 100 }
Get-Service | Where-Object Status -eq
"Running" | Select-Object NameEncadenar comandos con |.
Measure y Group
Get-ChildItem | Measure-Object -Property
Length -Sum -Average
Get-Process | Group-Object ProcessName |
Sort-Object Count -Descending
Estadísticas y agrupación.
Where-Object
Get-ChildItem | Where-Object {
$_.Length -gt 1MB }
Get-Process | Where-Object {
$_.ProcessName -like "*chrome*" }Filtrar objetos.
Select y Sort
Get-Process | Sort-Object CPU -Descending |
Select-Object -First 10 Name, CPU
Get-ChildItem | Sort-Object Length |
Format-Table Name, Length
Ordenar y seleccionar.
ForEach-Object
Get-ChildItem *.txt | ForEach-Object {
Write-Host $_.Name $_.Length
}
1..10 | ForEach-Object { $_ * 2 }Iterar sobre colecciones.
Ficheiros e Pastas
Leer y escribir
Get-Content archivo.txt
Get-Content archivo.txt -Tail 20
Set-Content archivo.txt "Nuevo texto"
Add-Content log.txt "Línea nueva"
Contenido de archivos.
Crear y copiar
New-Item -Path . -Name "carpeta" -Type Dir
New-Item archivo.txt -ItemType File
Copy-Item a.txt b.txt
Move-Item old/ new/
Manipular ítems.
Buscar contenido
Select-String -Path *.log -Pattern "error"
Select-String -Path app.log -Pattern
"exception" -Context 2,2
# Equivale a grep
Buscar en archivos.
Permisos y atributos
Get-Acl archivo.txt
Get-Item archivo.txt | Select-Object
Attributes, IsReadOnly
(Get-Item f.txt).IsReadOnly = $true
Ver y cambiar propiedades.
Sistema e Processos
Procesos
Get-Process
Get-Process -Name chrome
Stop-Process -Name notepad -Force
Start-Process "notepad.exe"
Get-Process | Sort-Object WS -Desc |
Select -First 5
Gestionar procesos.
Servicios
Get-Service
Get-Service -Name "wuauserv"
Start-Service -Name "Spooler"
Stop-Service -Name "Spooler"
Restart-Service -Name "nginx"
Controlar servicios de Windows.
Red
Get-NetIPAddress
Get-NetTCPConnection -LocalPort 8080
Test-Connection google.com # ping
Test-NetConnection host -Port 443
Diagnóstico de red.
Información del sistema
Get-ComputerInfo
Get-CimInstance Win32_OperatingSystem
Get-Volume # discos
Get-PhysicalDisk
$env:PATH
Hardware y SO.
Scripting
Variables
$nombre = "Ana"
$lista = @(1, 2, 3)
$hash = @{ clave = "valor"; n = 42 }
Write-Host "Hola $nombre"
$hash.clave
Tipos de datos.
Try / Catch
try {
Get-Content "C:\inexistente.txt" -ErrorAction Stop
} catch {
Write-Warning "Error: $_"
} finally {
"Concluido"
}Manejo de errores.
Condiciones
if ($x -gt 10) {
"Mayor"
} elseif ($x -eq 10) {
"Igual"
} else {
"Menor"
}
# -eq -ne -gt -lt -ge -leEstructuras condicionales.
Loops
foreach ($item in $lista) {
Write-Host $item
}
for ($i = 0; $i -lt 10; $i++) { $i }
while ($x -lt 100) { $x *= 2 }Iteración.
Funciones
function Get-Saludo {
param(
[string]$Nombre = "Mundo",
[int]$Veces = 1
)
1..$Veces | ForEach-Object {
"¡Hola, $Nombre!"
}
}Definir funciones con params.
Avançado
Módulos
Get-Module -ListAvailable
Import-Module ActiveDirectory
Install-Module -Name Posh-SSH
Find-Module -Name *azure*
Gestionar módulos.
PowerShell Remoting
Enter-PSSession -ComputerName Server01
Invoke-Command -ComputerName Server01 {
Get-Process | Select -First 5
}
Enable-PSRemoting -Force
Ejecutar remotamente.
WMI / CIM
Get-CimInstance Win32_BIOS
Get-CimInstance Win32_LogicalDisk |
Select DeviceID, @{N="GB Free";
E={[math]::Round($_.FreeSpace/1GB,1)}}
Consultar hardware/SO.
Programar tareas
$action = New-ScheduledTaskAction -Execute
"powershell.exe" -Argument "-File C:\script.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 8am
Register-ScheduledTask -TaskName "Backup"
-Action $action -Trigger $trigger
Task Scheduler vía PS.