Ce face Set-Content
Set-Content scrie valorile primite (din -Value sau din pipeline) într-un fișier, câte una pe linie. Dacă fișierul există, conținutul vechi este înlocuit complet; dacă nu există, este creat. Pentru a adăuga la final fără să ștergi ce era, folosește Add-Content.
Cmdlet-ul lucrează cu text: obiectele primite sunt transformate în șiruri cu .ToString(). Pentru a salva ieșirea formatată a unei comenzi (un tabel, așa cum îl vezi în consolă), folosește Out-File.
În PowerShell 7, codificarea implicită este utf8NoBOM. În Windows PowerShell 5.1, implicit era Default (pagina de cod ANSI a sistemului), așa că diacriticele românești se pot strica dacă fișierul e deschis apoi ca UTF-8; acolo scrie explicit -Encoding UTF8. Aliasul sc există doar în Windows PowerShell 5.1.
Parametri
| Parametru | Descriere |
|---|---|
-Path |
Fișierul în care scrii; acceptă wildcard-uri (poți scrie în mai multe fișiere deodată). |
-Value |
Conținutul nou. Un tablou de valori devine mai multe linii. Poate veni și din pipeline. |
-Encoding |
Codificarea: utf8NoBOM (implicit în 7), utf8BOM, unicode, ascii, ansi (din 7.4) etc. |
-NoNewline |
Nu adaugă linie nouă între valori și nici la final; valorile sunt lipite una de alta. |
-Force |
Scrie și într-un fișier marcat doar pentru citire. |
-PassThru |
Întoarce conținutul scris. |
-WhatIf / -Confirm |
Arată ce s-ar întâmpla, respectiv cere confirmare înainte de scriere. |
Ce returnează
Nimic implicit; cu -PassThru, un String cu conținutul scris.
Exemple
Exemplul 1: Creează un fișier cu mai multe linii
Fiecare element din tablou devine o linie. Diacriticele se păstrează, pentru că fișierul e scris în UTF-8.
Set-Content -Path .\orase.txt -Value 'Iași', 'Cluj-Napoca', 'Timișoara'
Get-Content -Path .\orase.txt
Ieșire în terminal
Iași
Cluj-Napoca
Timișoara
Exemplul 2: Conținutul vechi este înlocuit
Al doilea Set-Content suprascrie tot fișierul, nu adaugă la el.
Set-Content -Path .\stare.txt -Value 'Comanda 1042: în lucru'
Set-Content -Path .\stare.txt -Value 'Comanda 1042: livrată'
Get-Content -Path .\stare.txt
Ieșire în terminal
Comanda 1042: livrată
Exemplul 3: Înlocuiește un cuvânt într-un fișier existent
Parantezele fac ca fișierul să fie citit complet înainte ca Set-Content să scrie în el.
(Get-Content -Path .\config.txt) -replace 'Cluj', 'Iași' | Set-Content -Path .\config.txt
Get-Content -Path .\config.txt
Ieșire în terminal
oras=Iași
sediu=Cafenea Iași
Greșeli frecvente
Get-Content .\config.txt | Set-Content .\config.txt(fără paranteze) poate da eroare că fișierul este folosit de alt proces sau îl poate lăsa gol. Pune citirea între paranteze sau într-o variabilă.- Trimiterea unor obiecte complexe:
Get-Process | Set-Content procese.txtscrie pentru fiecare proces un text de formaSystem.Diagnostics.Process (pwsh), nu un tabel. Pentru ieșirea formatată foloseșteOut-FilesauExport-Csv. - Scripturile scrise pentru Windows PowerShell 5.1 fără
-Encodingproduc fișiere ANSI; aceleași scripturi în PowerShell 7 produc UTF-8. Dacă alt program citește fișierul, specifică explicit codificarea.
Comenzi înrudite
Add-Content: Adaugă text la finalul unui fișier fără să șteargă conținutul existent; e potrivit pentru jurnale (loguri).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.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.New-Item: Creează un fișier, un folder sau un link; poate pune și conținut inițial în fișierul nou.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.