Set-Content to cmdlet PowerShella, który zapisuje tekst do pliku, nadpisując jego dotychczasową zawartość. Jeśli plik nie istnieje, zostanie utworzony; jeśli istnieje, jego stara treść znika bez pytania. To powershellowy odpowiednik przekierowania > znanego z basha, tylko z pełną kontrolą nad kodowaniem, obsługą wielu plików naraz i wsparciem dla potoku. Gdy chcesz coś dopisać zamiast nadpisać, sięgasz po Add-Content — ale o tym za chwilę.
Składnia i najważniejsze opcje
Podstawowa forma to Set-Content [-Path] . Zarówno ścieżkę, jak i wartość możesz podawać pozycyjnie albo przez potok.
-Path— ścieżka do pliku (lub kilku plików), do którego piszesz. Akceptuje symbole wieloznaczne.-Value— treść do zapisania. Może być stringiem, tablicą stringów albo dowolnym obiektem — PowerShell zamieni go na tekst.-Encoding— kodowanie pliku. Domyślnieutf8NoBOMw PowerShell 6+, ale ANSI w Windows PowerShell 5.1. Warto ustawiać jawnie.-NoNewline— nie dokleja znaku nowej linii na końcu ani między elementami. Przydatne, gdy nie chcesz „osieroconego” entera.-Force— nadpisuje plik tylko do odczytu (read-only). Nie łamie uprawnień systemowych, jedynie atrybut.-LiteralPath— ścieżka brana dosłownie, bez interpretacji*,?czy nawiasów. Ratuje przy dziwnych nazwach plików.-WhatIf— pokazuje, co komenda by zrobiła, ale nic nie zapisuje. Test na sucho przed nadpisaniem.-PassThru— zwraca zapisaną wartość do potoku, żeby móc ją od razu wykorzystać dalej.
Przykłady użycia
Set-Content -Path log.txt -Value "Start"— tworzy (lub czyści i nadpisuje)log.txtz jedną linią tekstu.Set-Content C:\config\app.ini -Value $tresc -Encoding utf8— zapisuje zmienną$trescz jawnie wymuszonym UTF-8."linia1","linia2","linia3" | Set-Content plik.txt— każdy element tablicy ląduje w osobnej linii pliku.Set-Content raport.csv -Value $dane -NoNewline— zapisuje bez końcowego entera, np. gdy sam zarządzasz separatorami.Set-Content readonly.txt -Value "nowe" -Force— nadpisuje plik oznaczony jako tylko do odczytu.
Częste błędy i pułapki
Nadpisuje bez ostrzeżenia. To nie Add-Content — jeśli plik miał 500 linii, zostanie po nich jedna. Jak nie masz pewności, dorzuć -WhatIf.
Kodowanie różni się między wersjami. W Windows PowerShell 5.1 domyślne kodowanie to ANSI, a w PowerShell 7 to UTF-8 bez BOM. Skrypt „działający u ciebie” potrafi zepsuć polskie znaki na innej maszynie — dlatego zawsze podawaj -Encoding jawnie.
Uwaga na potok. Gdy karmisz Set-Content obiektami (nie stringami), zapisze się ich reprezentacja tekstowa ToString(), a nie sformatowana tabela, którą widzisz w konsoli. Do zrzutów obiektów lepszy bywa Out-File.
Powiązane komendy: Add-Content (dopisuje zamiast nadpisywać), Get-Content (odczyt), Out-File (zapis z formatowaniem konsolowym) oraz Clear-Content (czyści treść, zostawiając plik).