Import-Csv

Importuje dane z pliku CSV jako obiekty do potoku.

Import-Csv to cmdlet PowerShella, który czyta plik CSV i zamienia każdy wiersz na obiekt (PSCustomObject) z właściwościami odpowiadającymi kolumnom z nagłówka. Dzięki temu nie grzebiesz w surowym tekście, tylko od razu pracujesz na danych w potoku — filtrujesz, sortujesz, liczysz i przekazujesz dalej do ForEach-Object czy Where-Object. To podstawowe narzędzie, gdy musisz przemielić eksport z Excela, AD albo dowolnego systemu, który pluje CSV-kami.

Składnia i najważniejsze opcje

Podstawowa forma: Import-Csv [-Path] [-Delimiter ] [-Header ] [-Encoding ]

  • -Path — ścieżka (lub kilka ścieżek) do pliku CSV; akceptuje symbole wieloznaczne i można ją podać przez potok.
  • -LiteralPath — to samo co -Path, ale ścieżka brana dosłownie, bez interpretacji znaków typu * czy [ ]. Ratunek dla nazw z nawiasami.
  • -Delimiter — znak rozdzielający kolumny; domyślnie przecinek. Dla średnika podaj -Delimiter ';'.
  • -Header — własne nazwy kolumn, gdy plik ich nie ma (albo chcesz je nadpisać). Pamiętaj, żeby usunąć oryginalny wiersz nagłówka.
  • -Encoding — kodowanie pliku; domyślnie utf8NoBOM. Przydaje się przy polskich znakach z plików ANSI.
  • -UseCulture — bierze separator listy z bieżącej kultury systemu (sprawdzisz go przez (Get-Culture).TextInfo.ListSeparator). W polskim systemie to zwykle średnik.

Przykłady użycia

  • Import-Csv .\uzytkownicy.csv — wczytuje plik i zwraca obiekty z kolumnami jako właściwościami.
  • Import-Csv .\dane.csv -Delimiter ';' — czyta plik z polskim Excelem, gdzie separatorem jest średnik.
  • Import-Csv .\osoby.csv | Where-Object { $_.Wiek -gt 30 } — filtruje wiersze, w których kolumna Wiek przekracza 30.
  • Import-Csv .\bez_naglowka.csv -Header Imie,Nazwisko,Email — przypisuje nazwy kolumn plikowi, który ich nie ma.
  • Import-Csv .\stary.csv -Encoding ansi | Export-Csv .\nowy.csv -NoTypeInformation -Encoding utf8 — konwertuje plik z ANSI na UTF-8 bez psucia polskich znaków.

Częste błędy i pułapki

Najczęstsza wpadka to zły -Delimiter. Jeśli plik ma średniki, a Ty czytasz domyślnym przecinkiem, PowerShell nie rozbije wierszy na kolumny — dostaniesz obiekty z jedną właściwością, której nazwą jest cały nagłówek. Wygląda to jak uszkodzony plik, a to tylko zła flaga.

Drugi klasyk: używasz -Header, ale nie usuwasz oryginalnego nagłówka z pliku — wtedy pierwszy wiersz tekstu wleci jako zwykły obiekt z danymi. Trzeci to kodowanie: pliki z polskimi ogonkami zapisane w ANSI potrafią dać krzaki, jeśli nie podasz -Encoding ansi. I pamiętaj, że Import-Csv ładuje całość do pamięci — przy plikach na gigabajty lepiej czytać strumieniowo przez Get-Content z ConvertFrom-Csv kawałkami.

Powiązane komendy: Export-Csv, ConvertFrom-Csv, ConvertTo-Csv, Get-Content, Where-Object, ForEach-Object.