Export-Csv

Eksportuje obiekty do pliku CSV.

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 | Export-Csv [-Path] <ścieżka> [-NoTypeInformation]. Najczęściej używane parametry:

  • -Path — ścieżka do pliku wynikowego (działa też skrótowo, bez wpisywania nazwy parametru).
  • -NoTypeInformation — usuwa nagłówek #TYPE z 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.