Ce face Write-Host / Write-Output
Write-Output (alias echo; pe Windows și write) trimite obiecte în fluxul principal de ieșire, același în care ajunge orice valoare scrisă singură pe un rând. De aceea Write-Output 'Gata' și simplu 'Gata' fac același lucru. Ce trimite poate fi preluat de comanda următoare, salvat într-o variabilă sau redirecționat într-un fișier.
Write-Host scrie direct pentru cel care se uită la consolă: poate colora textul (-ForegroundColor, -BackgroundColor), poate rămâne pe același rând (-NoNewline) și pune separatoare între valori (-Separator). Ce scrie nu intră în pipeline și nu ajunge în variabile. Din Windows PowerShell 5.0, Write-Host scrie în fluxul de informații (numărul 6), deci poate fi ascuns cu 6>$null sau -InformationAction Ignore.
Regula practică: datele pe care le întoarce un script sau o funcție merg prin Write-Output (sau implicit); mesajele de stare pentru om merg prin Write-Host, Write-Verbose sau Write-Warning. Culorile acceptate sunt valorile ConsoleColor: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White.
Parametri
| Parametru | Descriere |
|---|---|
Write-Host -Object |
Ce se afișează (pozițional); o colecție se scrie pe un rând, cu spații între elemente. |
-ForegroundColor |
Culoarea textului (Green, Red, Yellow…). |
-BackgroundColor |
Culoarea fundalului. |
-NoNewline |
Nu trece la rând nou după text. |
-Separator |
Textul pus între elementele afișate. |
Write-Output -InputObject |
Obiectele trimise în pipeline (pozițional). |
-NoEnumerate |
Trimite o colecție ca un singur obiect, nu element cu element. |
Ce returnează
Write-Host nu returnează nimic în pipeline. Write-Output returnează exact obiectele primite.
Exemple
Exemplul 1: Mesaje colorate pentru utilizator
Primul rând apare verde în consolă. Valorile date separat se afișează cu un spațiu între ele.
Write-Host 'Backup terminat' -ForegroundColor Green
Write-Host 'Total:' 125 'lei'
Ieșire în terminal
Backup terminat
Total: 125 lei
Exemplul 2: Ce ajunge în variabilă
Mesajul lui Write-Host apare pe ecran în timpul apelului, dar în variabilă intră doar valoarea din Write-Output.
function Test-Iesire {
Write-Host 'Mesaj pentru ecran'
Write-Output 'Valoare returnată'
}
$rezultat = Test-Iesire
"În variabilă: $rezultat"
Ieșire în terminal
Mesaj pentru ecran
În variabilă: Valoare returnată
Exemplul 3: Pe același rând și cu separator
-NoNewline lipește următorul mesaj de cel curent; -Separator înlocuiește spațiul dintre elemente.
Write-Host 'Se procesează... ' -NoNewline
Write-Host 'gata'
Write-Host 'Iași', 'Cluj', 'Brașov' -Separator ' | '
Ieșire în terminal
Se procesează... gata
Iași | Cluj | Brașov
Greșeli frecvente
- Să folosești
Write-Hostpentru rezultatul unei funcții: apelantul nu îl poate salva în variabilă sau trimite mai departe. Pentru date foloseșteWrite-Outputsau scrie valoarea direct. - Să trimiți un obiect complex la
Write-Host:@{a = 1} | Write-HostafișeazăSystem.Collections.Hashtable. Formatează textul înainte sau foloseșteOut-String. - Să aștepți ca
Write-Host ... > log.txtsă scrie în fișier:>redirecționează doar fluxul de ieșire. Folosește6>sau, mai simplu,Write-Output.
Comenzi înrudite
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.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.Pipeline (|): Operatorul | trimite obiectele unei comenzi, unul câte unul, comenzii următoare; $_ este obiectul curent, iar && și || înlănțuie comenzi.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.