PS

Învață PowerShell: comenzi explicate cu exemple

55 de comenzi 9 categorii

PowerShell este shell-ul și limbajul de scripting de la Microsoft. Spre deosebire de Bash sau CMD, comenzile lui (cmdlet-urile, cu nume de forma Verb-Substantiv, ca Get-ChildItem) trimit prin pipeline obiecte .NET, nu text, așa că filtrezi, sortezi și exporți date fără să tai coloane de text.

Există două variante: Windows PowerShell 5.1, inclus în Windows, și PowerShell 7 (pwsh), open source, care rulează pe Windows, macOS și Linux. Paginile de aici țintesc PowerShell 7.5 și mai nou și spun unde Windows PowerShell 5.1 se comportă altfel.

Mai jos găsești cmdlet-urile și noțiunile de bază grupate pe categorii: primii pași (ajutor, pipeline, politica de execuție, echivalentele comenzilor CMD), variabile și tipuri, instrucțiuni de control și funcții, fișiere și foldere, lucrul cu obiecte, formatare și export (CSV, JSON), procese și servicii, rețea, module și remoting.

Primii pași 8 comenzi

Variabile și tipuri 4 comenzi

Control și funcții 7 comenzi

Fișiere și foldere 12 comenzi

Lucrul cu obiecte 6 comenzi

Formatare și conversie 6 comenzi

Procese și servicii 5 comenzi

Rețea și web 2 comenzi

Module, pachete și remoting 5 comenzi

Toate cmdlet-urile și noțiunile

Lista completă a cmdlet-urilor și a noțiunilor PowerShell explicate în această secțiune, cu sintaxa lor uzuală. Fiecare are o pagină dedicată, cu explicații, parametri și exemple.

Primii pași (8)

Funcție Ce face
Get-Help Afișează documentația unui cmdlet sau a unui subiect about_*; Update-Help descarcă fișierele de ajutor pe calculator.
Get-Help [-Name] <String> [-Examples | -Detailed | -Full | -Online | -Parameter <String[]>]
Get-Command Găsește comenzile disponibile (cmdlet-uri, funcții, aliasuri, programe); Get-Alias arată ce comandă se ascunde în spatele unui alias.
Get-Command [[-Name] <String[]>] [-Verb <String[]>] [-Noun <String[]>] [-Module <String[]>] [-CommandType <CommandTypes>]
Get-Member Arată tipul obiectelor dintr-un pipeline și ce proprietăți și metode au, ca să știi ce poți selecta, filtra sau apela.
<comandă> | Get-Member [[-Name] <String[]>] [-MemberType <PSMemberTypes>] [-Static] [-Force]
Pipeline (|) Operatorul | trimite obiectele unei comenzi, unul câte unul, comenzii următoare; $_ este obiectul curent, iar && și || înlănțuie comenzi.
<comandă1> | <comandă2> | <comandă3>
Set-ExecutionPolicy Stabilește pe Windows dacă PowerShell are voie să ruleze scripturi .ps1; Unblock-File deblochează un script descărcat de pe internet.
Set-ExecutionPolicy [-ExecutionPolicy] <ExecutionPolicy> [[-Scope] <ExecutionPolicyScope>] [-Force]
$PROFILE Variabila $PROFILE conține calea scriptului care rulează la fiecare pornire a PowerShell, unde îți pui aliasurile și funcțiile.
$PROFILE
Comenzi CMD și echivalentul PowerShell Ce folosești în PowerShell în locul comenzilor CMD obișnuite (dir, cd, copy, del, ipconfig, ping, tasklist, taskkill, set).
dir → Get-ChildItem cd → Set-Location copy → Copy-Item del → Remove-Item
PowerShell pe macOS și Linux Cum instalezi și pornești PowerShell 7 (pwsh) pe macOS și Linux și ce se comportă diferit față de Windows: aliasuri, majuscule, căi.
pwsh

Variabile și tipuri (4)

Funcție Ce face
Variabile și tipuri Variabilele încep cu $, primesc orice obiect .NET și pot fi legate de un tip ([int], [string], [datetime]); .GetType() arată tipul.
$nume = valoare
Tablouri (@()) Un tablou ține mai multe valori; îl creezi cu virgule sau @(), îl citești cu [index], iar += creează de fiecare dată un tablou nou.
$t = 'a', 'b', 'c'
Hashtable (@{}) Un hashtable ține perechi cheie-valoare; [ordered] păstrează ordinea cheilor, iar [pscustomobject] transformă perechile într-un obiect.
$h = @{ Cheie = valoare; Alta = valoare }
Operatori de comparație PowerShell compară cu -eq, -ne, -gt, -lt, -like, -match, -contains, -in, nu cu = sau >; implicit nu ține cont de majuscule.
-eq -ne -gt -ge -lt -le

Control și funcții (7)

Funcție Ce face
if / elseif / else if rulează un bloc de cod doar când condiția e adevărată; elseif și else tratează celelalte cazuri, iar ?: (din PowerShell 7.0) e forma scurtă.
if (<condiție>) { ... } elseif (<condiție>) { ... } else { ... }
switch switch compară o valoare (sau fiecare element al unei colecții) cu mai multe modele și rulează blocul celor potrivite; are -Wildcard și -Regex.
switch [-Wildcard | -Regex | -Exact] [-CaseSensitive] (<valoare>) {
foreach Buclele foreach, for, while și do-while repetă un bloc de cod; foreach parcurge o colecție din memorie, ForEach-Object lucrează în pipeline.
foreach ($element in $colectie) { ... }
try / catch / finally try/catch prinde erorile care opresc o comandă, iar finally rulează mereu; pentru erorile obișnuite ale cmdlet-urilor pui -ErrorAction Stop.
try { ... }
Funcții și param() O funcție grupează cod sub un nume; param() îi declară parametrii, cu tip și valoare implicită, iar [CmdletBinding()] o face să meargă ca un cmdlet.
function Verb-Substantiv {
Write-Host / Write-Output Write-Host scrie text doar pe ecran (cu culori), Write-Output trimite valori în pipeline, unde pot fi salvate într-o variabilă sau prelucrate.
Write-Host [[-Object] <Object>] [-NoNewline] [-Separator <Object>] [-ForegroundColor <ConsoleColor>] [-BackgroundColor <ConsoleColor>]
Get-Date Get-Date întoarce data și ora curentă (sau una dată) ca obiect [datetime], pe care îl formatezi cu -Format și îl calculezi cu .AddDays().
Get-Date [[-Date] <DateTime>] [-Year <Int32>] [-Month <Int32>] [-Day <Int32>] [-Format <String>] [-AsUTC]

Fișiere și foldere (12)

Funcție Ce face
Get-ChildItem Listează fișierele și folderele dintr-o locație, opțional recursiv, filtrate după nume sau tip (echivalentul lui dir și ls).
Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Recurse] [-Depth <uint>] [-File] [-Directory] [-Force] [-Name]
Set-Location Schimbă folderul curent (cd); Get-Location îl afișează, iar Push-Location și Pop-Location salvează și refac locațiile pe o stivă.
Set-Location [[-Path] <string>] [-PassThru]
Get-Content Citește conținutul unui fișier ca listă de linii (sau ca un singur șir cu -Raw); poate afișa primele sau ultimele linii și urmări un log.
Get-Content [-Path] <string[]> [-TotalCount <long>] [-Tail <int>] [-Raw] [-Wait] [-Encoding <Encoding>]
Set-Content Scrie text într-un fișier și înlocuiește tot conținutul existent; creează fișierul dacă nu există.
Set-Content [-Path] <string[]> [-Value] <Object[]> [-Encoding <Encoding>] [-NoNewline] [-Force] [-PassThru]
Add-Content Adaugă text la finalul unui fișier fără să șteargă conținutul existent; e potrivit pentru jurnale (loguri).
Add-Content [-Path] <string[]> [-Value] <Object[]> [-Encoding <Encoding>] [-NoNewline] [-PassThru]
New-Item Creează un fișier, un folder sau un link; poate pune și conținut inițial în fișierul nou.
New-Item [-Path] <string[]> [-ItemType <string>] [-Value <Object>] [-Force]
Copy-Item Copiază fișiere și foldere în altă locație, opțional cu tot conținutul subfolderelor și cu nume nou.
Copy-Item [-Path] <string[]> [[-Destination] <string>] [-Recurse] [-Force] [-Filter <string>] [-PassThru]
Move-Item Mută fișiere și foldere în altă locație, opțional cu nume nou; elementul dispare din locul inițial.
Move-Item [-Path] <string[]> [[-Destination] <string>] [-Force] [-Filter <string>] [-PassThru]
Rename-Item Schimbă numele unui fișier sau folder, fără să-l mute; poate redenumi mai multe fișiere cu un script block.
Rename-Item [-Path] <string> [-NewName] <string> [-Force] [-PassThru]
Remove-Item Șterge fișiere și foldere (și alte elemente, ca chei de registry); ștergerea este definitivă, nu în Coșul de reciclare.
Remove-Item [-Path] <string[]> [-Recurse] [-Force] [-Include <string[]>] [-Exclude <string[]>] [-WhatIf] [-Confirm]
Test-Path Verifică dacă o cale există și întoarce True sau False; poate cere să fie fișier sau folder și să fie mai nouă decât o dată.
Test-Path [-Path] <string[]> [-PathType {Any | Container | Leaf}] [-IsValid] [-NewerThan <datetime>] [-OlderThan <datetime>]
Out-File Salvează într-un fișier ieșirea unei comenzi, exact cum apare în consolă; operatorii de redirecționare > și >> fac același lucru.
Out-File [-FilePath] <string> [[-Encoding] <Encoding>] [-Append] [-NoClobber] [-Width <int>] [-NoNewline]

Lucrul cu obiecte (6)

Funcție Ce face
Select-Object Alege doar anumite proprietăți ale obiectelor, adaugă proprietăți calculate sau păstrează primele, ultimele ori unicele elemente.
Select-Object [[-Property] <Object[]>] [-ExpandProperty <string>] [-First <int>] [-Last <int>] [-Skip <int>] [-Unique]
Where-Object Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.
Where-Object [-FilterScript] <ScriptBlock>
ForEach-Object Rulează un bloc de cod pentru fiecare obiect din pipeline; din PowerShell 7.0 poate rula blocurile în paralel cu -Parallel.
ForEach-Object [-Begin <ScriptBlock>] [-Process] <ScriptBlock[]> [-End <ScriptBlock>]
Sort-Object Sortează obiectele după una sau mai multe proprietăți, crescător sau descrescător, opțional doar primele N.
Sort-Object [[-Property] <Object[]>] [-Descending] [-Unique] [-Top <int>] [-Bottom <int>] [-Stable] [-CaseSensitive] [-Culture <string>]
Group-Object Grupează obiectele care au aceeași valoare la o proprietate și arată câte sunt în fiecare grup.
Group-Object [[-Property] <Object[]>] [-NoElement] [-AsHashTable] [-AsString] [-CaseSensitive] [-Culture <string>]
Measure-Object Numără obiectele și calculează suma, media, minimul și maximul unei proprietăți, sau numără rândurile, cuvintele și caracterele unui text.
Measure-Object [[-Property] <string[]>] [-Sum] [-Average] [-Maximum] [-Minimum] [-StandardDeviation] [-AllStats]

Formatare și conversie (6)

Funcție Ce face
Format-Table Afișează obiectele ca tabel, cu coloanele alese de tine, inclusiv coloane calculate.
Format-Table [[-Property] <Object[]>] [-AutoSize] [-Wrap] [-GroupBy <Object>] [-HideTableHeaders] [-RepeatHeader] [-View <string>]
Format-List Afișează fiecare proprietate a obiectelor pe un rând separat, sub forma „Nume : valoare”.
Format-List [[-Property] <Object[]>] [-GroupBy <Object>] [-View <string>]
Export-Csv Salvează obiectele într-un fișier CSV: un rând de antet cu numele proprietăților și câte un rând pentru fiecare obiect.
Export-Csv [-Path] <string> [[-Delimiter] <char>] [-Encoding <Encoding>] [-Append] [-UseCulture] [-UseQuotes <Always|AsNeeded|Never>] [-NoHeader] [-Force] [-NoClobber]
Import-Csv Citește un fișier CSV și creează câte un obiect pentru fiecare rând, cu proprietăți numite după coloanele din antet.
Import-Csv [-Path] <string[]> [[-Delimiter] <char>] [-Header <string[]>] [-Encoding <Encoding>]
ConvertTo-Json Transformă obiecte PowerShell într-un șir JSON, de exemplu pentru un fișier de configurare sau corpul unei cereri către un API.
ConvertTo-Json [-InputObject] <Object> [-Depth <int>] [-Compress] [-AsArray] [-EnumsAsStrings] [-EscapeHandling <StringEscapeHandling>]
ConvertFrom-Json Transformă un text JSON în obiecte PowerShell (sau hashtable-uri), ale căror câmpuri le citești cu punct.
ConvertFrom-Json [-InputObject] <string> [-AsHashtable] [-Depth <int>] [-NoEnumerate] [-DateKind <JsonDateKind>]

Procese și servicii (5)

Funcție Ce face
Get-Process Afișează procesele care rulează pe computerul local, cu memoria folosită, timpul de procesor și ID-ul (PID) fiecăruia.
Get-Process [[-Name] <String[]>] [-Module] [-FileVersionInfo]
Stop-Process Oprește unul sau mai multe procese locale, după nume, după ID sau primite prin pipeline de la Get-Process.
Stop-Process [-Id] <Int32[]> [-Force] [-PassThru] [-WhatIf] [-Confirm]
Start-Process Pornește un program sau deschide un fișier cu aplicația asociată, opțional ca administrator, într-o fereastră nouă sau așteptând să se termine.
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-Wait] [-PassThru]
Get-Service Listează serviciile Windows, pornite și oprite, cu starea, numele scurt și numele afișat; există doar pe Windows.
Get-Service [[-Name] <String[]>] [-DependentServices] [-RequiredServices] [-Exclude <String[]>]
Start-Service / Stop-Service Pornesc, opresc și repornesc servicii Windows; cer o sesiune PowerShell deschisă ca administrator.
Start-Service [-Name] <String[]> [-PassThru] [-WhatIf]

Rețea și web (2)

Funcție Ce face
Invoke-WebRequest Trimite o cerere HTTP sau HTTPS și întoarce răspunsul complet (cod de stare, antete, conținut, linkuri); poate și descărca fișiere.
Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]
Invoke-RestMethod Apelează un API REST și transformă automat răspunsul JSON sau XML în obiecte PowerShell, gata de filtrat și afișat.
Invoke-RestMethod [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>] [-ContentType <String>]

Module, pachete și remoting (5)

Funcție Ce face
Install-Module Descarcă și instalează module din PowerShell Gallery; în PowerShell 7.4+ ai și Install-PSResource, din modulul PSResourceGet.
Install-Module [-Name] <String[]> [-Scope <String>] [-RequiredVersion <String>] [-Repository <String[]>] [-Force] [-AllowClobber]
Import-Module Încarcă un modul în sesiunea curentă; din PowerShell 3.0 modulele instalate se încarcă și singure la prima folosire a unei comenzi.
Import-Module [-Name] <String[]> [-MinimumVersion <Version>] [-RequiredVersion <Version>] [-Prefix <String>] [-Force] [-PassThru]
winget Managerul de pachete din Windows: caută, instalează, actualizează și listează aplicații din linia de comandă, inclusiv din PowerShell.
winget search [[-q] <query>] [<options>]
Enter-PSSession Deschide o sesiune interactivă pe un alt computer (prin WinRM sau, din PowerShell 6.0, prin SSH); ieși cu Exit-PSSession sau exit.
Enter-PSSession [-ComputerName] <String> [-Credential <PSCredential>] [-ConfigurationName <String>]
Invoke-Command Rulează comenzi sau scripturi pe unul sau mai multe computere deodată și aduce înapoi rezultatele, inclusiv erorile.
Invoke-Command [-ComputerName] <String[]> [-ScriptBlock] <ScriptBlock> [-ArgumentList <Object[]>] [-Credential <PSCredential>]