Set-Content în PowerShell

Fișiere și foldere Windows PowerShell 1.0

Scrie text într-un fișier și înlocuiește tot conținutul existent; creează fișierul dacă nu există.

Sintaxă
Set-Content [-Path] <string[]> [-Value] <Object[]> [-Encoding <Encoding>] [-NoNewline] [-Force] [-PassThru]

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.txt scrie pentru fiecare proces un text de forma System.Diagnostics.Process (pwsh), nu un tabel. Pentru ieșirea formatată folosește Out-File sau Export-Csv.
  • Scripturile scrise pentru Windows PowerShell 5.1 fără -Encoding produc 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.