Basi
Comandi e Aiuto
Get-Help Get-Process # mostra aiuto per il cmdlet Get-Help Get-Process -Online # apre documentazione online Get-Command *service* # trova comandi per nome Get-Alias ls # mostra destinazione alias
Alias Comuni
ls → Get-ChildItemElenca file e directory
cd → Set-LocationCambia directory
cp → Copy-ItemCopia file o directory
mv → Move-ItemSposta o rinomina
rm → Remove-ItemElimina file o directory
cat → Get-ContentLegge il contenuto del file
echo → Write-OutputStampa nella pipeline
cls → Clear-HostPulisce la console
Variabili
Basi delle Variabili
$name = "Alice" # stringa $count = 42 # intero $pi = 3.14 # double $list = @(1, 2, 3) # array $hash = @{a=1; b=2} # hashtable
Variabili Automatiche
$_Oggetto pipeline corrente
$PSVersionTableInfo versione PowerShell
$HOMEDirectory home dell'utente
$PWDDirectory corrente
$nullValore null
$true / $falseCostanti booleane
$ErrorArray degli errori recenti
$LASTEXITCODECodice di uscita dell'ultimo comando nativo
Variabili d'Ambiente
$env:PATH # leggi variabile d'ambiente $env:MY_VAR = "value" # imposta variabile d'ambiente Get-ChildItem Env: # elenca tutte le variabili d'ambiente
Operatori
Operatori di Confronto
-eq -neUguale / diverso
-gt -ltMaggiore / minore di
-ge -leMaggiore/minore o uguale
-like -notlikeCorrispondenza wildcard (*, ?)
-match -notmatchCorrispondenza regex
-containsLa collezione contiene il valore
-in -notinValore nella collezione
Operatori Logici e Altri
-and -or -notOperatori logici
!NOT logico (alias)
-replaceSostituzione regex: 'hi' -replace 'h','b'
-split -joinDivide / unisce stringhe
..Range: 1..5 → 1,2,3,4,5
?:Ternario (v7+): $x ? 'yes' : 'no'
Flusso di Controllo
if / elseif / else
if ($age -ge 18) { "Adulto" } elseif ($age -ge 13) { "Adolescente" } else { "Bambino" }
switch
switch ($color) { "red" { "Stop" } "green" { "Vai" } default { "Sconosciuto" } }
Cicli
foreach ($item in $list) { $item } for ($i=0; $i -lt 5; $i++) { $i } while ($x -lt 10) { $x++ } 1..5 | ForEach-Object { $_ * 2 }
Funzioni
Definire Funzioni
function Get-Greeting { param([string]$Name = "World") "Hello, $Name!" } Get-Greeting -Name "Alice"
Parametri Avanzati
function Copy-SafeFile { [CmdletBinding()] param( [Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][string]$Dest ) Copy-Item $Path $Dest -WhatIf:$WhatIfPreference }
Oggetti e Pipeline
Basi della 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
Cmdlet Pipeline Principali
Where-ObjectFiltra oggetti: | Where {$_.CPU -gt 10}
Select-ObjectSeleziona proprietà: | Select Name, CPU
Sort-ObjectOrdina: | Sort CPU -Desc
ForEach-ObjectTrasforma ogni elemento: | ForEach {$_.Name}
Measure-ObjectConta, somma, media, min, max
Group-ObjectRaggruppa per valore di proprietà
Format-TableVisualizza come tabella: | ft -Auto
Export-CsvEsporta in CSV: | Export-Csv out.csv
File
Operazioni sui File
Get-Content log.txt # legge file Set-Content out.txt "hello" # scrive (sovrascrive) Add-Content out.txt "more" # aggiunge in fondo Get-Content log.txt | Select-String "error" # grep
Cmdlet Percorso e File
Test-Path $pathVerifica se file/dir esiste
New-Item -Type FileCrea file
New-Item -Type DirectoryCrea directory
Resolve-PathOttieni percorso assoluto
Join-PathCombina segmenti di percorso
Split-PathOttieni genitore o foglia
Get-ItemPropertyAttributi e metadati del file
Remove-Item -RecurseElimina directory in modo ricorsivo
Stringhe
Basi delle Stringhe
"Hello, $name" # interpolazione (doppi apici) 'Hello, $name' # letterale (singoli apici) "Length: $($list.Count)" # espressione nella stringa @" Multi-riga here-string con $name "@
Metodi sulle Stringhe
.ToUpper() / .ToLower()Cambia maiuscolo/minuscolo
.Trim()Rimuovi spazi iniziali/finali
.Split(',')Divide in array
.Replace('a','b')Sostituisce sottostringa
.StartsWith() / .EndsWith()Verifica prefisso / suffisso
.Substring(0,5)Estrae sottostringa
.Contains('text')Verifica se contiene
-f operator'{0} is {1}' -f 'sky','blue'
Moduli
Gestione dei Moduli
Get-Module -ListAvailable # moduli installati Find-Module -Name Az* # cerca nella gallery Install-Module -Name Pester # installa dalla gallery Import-Module ActiveDirectory # carica modulo
Comandi Modulo
Get-ModuleElenca i moduli caricati
Import-ModuleCarica il modulo nella sessione
Remove-ModuleScarica il modulo dalla sessione
Update-ModuleAggiorna il modulo installato
Get-Command -Module XElenca i comandi nel modulo
$env:PSModulePathPercorsi di ricerca dei moduli
Pattern Comuni
Gestione degli Errori
try { Get-Item "C:\missing" -ErrorAction Stop } catch { "Errore: $_" } finally { "Pulizia qui" }
Criteri di Esecuzione e Remoting
Get-ExecutionPolicyMostra la policy degli script corrente
Set-ExecutionPolicy RemoteSignedConsenti script locali
Enter-PSSession -Computer SRV1Sessione remota interattiva
Invoke-Command -Computer SRV1 -Script {}Esegui blocco script in remoto
Start-Job { long-task }Esegui job in background
Receive-Job -Id 1Ottieni output del job in background