Export-Csv to cmdlet PowerShella, który bierze obiekty lecące potokiem i zapisuje je do pliku CSV — każdy obiekt staje się wierszem, a jego właściwości kolumnami. To podstawowe narzędzie, gdy chcesz wyciągnąć wynik Get-Process, Get-ADUser czy zapytania do bazy i przekazać go komuś, kto żyje w Excelu albo wczytuje dane do innego skryptu. Innymi słowy: most między światem obiektów PowerShella a płaskim tekstem, który zrozumie każdy.
Składnia i najważniejsze opcje
Podstawowa forma to . Najczęściej używane parametry:
-Path— ścieżka do pliku wynikowego (działa też skrótowo, bez wpisywania nazwy parametru).-NoTypeInformation— usuwa nagłówek#TYPEz początku pliku. W Windows PowerShell 5.1 prawie zawsze go chcesz; w PowerShell 6+ jest domyślny i zostawiony tylko dla kompatybilności.-Append— dopisuje wiersze do istniejącego pliku zamiast go nadpisywać.-Delimiter— zmienia separator, np. na średnik dla polskiego Excela:-Delimiter ';'.-Encoding— kodowanie pliku, np.-Encoding UTF8, żeby polskie znaki nie zamieniły się w krzaki.-NoClobber— nie nadpisze pliku, jeśli już istnieje (chroni przed przypadkową utratą danych).-Force— wymusza zapis, np. do pliku tylko do odczytu.-UseCulture— używa separatora zgodnego z ustawieniami regionalnymi systemu.
Przykłady użycia
Get-Process | Export-Csv -Path procesy.csv -NoTypeInformation— zapisuje listę uruchomionych procesów do pliku CSV bez linijki#TYPE.Get-Service | Where-Object Status -eq 'Running' | Export-Csv uslugi.csv -Encoding UTF8 -NoTypeInformation— eksportuje tylko działające usługi w kodowaniu UTF-8.Import-Csv stare.csv | Export-Csv -Path zbiorczy.csv -Append -NoTypeInformation— dokleja zawartość jednego pliku CSV do drugiego.Get-ChildItem C:\Logi | Select-Object Name, Length, LastWriteTime | Export-Csv pliki.csv -Delimiter ';' -NoTypeInformation— zapisuje wybrane właściwości plików ze średnikiem jako separatorem, gotowe pod polski Excel.Get-EventLog System -Newest 50 | Export-Csv -Path zdarzenia.csv -NoClobber -NoTypeInformation— eksportuje 50 ostatnich zdarzeń systemowych i nie nadpisze pliku, jeśli ten już istnieje.
Częste błędy i pułapki
Pierwsza klasyka: zapominasz o -NoTypeInformation w PowerShell 5.1 i dostajesz na górze pliku linijkę #TYPE System.Diagnostics.Process, która rozjeżdża import w Excelu. W PowerShell 6 i 7 ten nagłówek zniknął domyślnie — jeśli z jakiegoś powodu go potrzebujesz, użyj -IncludeTypeInformation.
Druga pułapka: zagnieżdżone obiekty. Jeśli właściwość nie jest prostym tekstem ani liczbą, w CSV zobaczysz System.Object[] zamiast danych. Lekarstwo to wcześniejszy Select-Object z właściwościami obliczanymi, który spłaszczy wartości do stringów.
Trzecia: kodowanie. Domyślne kodowanie potrafi zepsuć polskie znaki, więc przy danych z ą, ł czy ż dorzucaj -Encoding UTF8. I pamiętaj, że Export-Csv bez -Append nadpisuje plik bez pytania — łatwo skasować poprzedni eksport.
Powiązane komendy: Import-Csv (odczyt z powrotem do obiektów), ConvertTo-Csv (CSV jako tekst bez zapisu na dysk), ConvertFrom-Csv, Export-Clixml oraz Out-File.