DevTools

Cheatsheet PowerShell

Shell de automação e scripting da Microsoft

Volver a los lenguajes
PowerShell
26 tarjetas encontradas
Categorías:
Versiones:

Comandos Básicos


4 cards
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


5 cards
Pipeline
Get-Process | Where-Object {
  $_.CPU -gt 100 }

Get-Service | Where-Object Status -eq
  "Running" | Select-Object Name

Encadenar 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


4 cards
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


4 cards
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


5 cards
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 -le

Estructuras 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


4 cards
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.