Cześć, witaj w kolejnej lekcji z cyklu PowerShell Podstawy. Dziś porozmawiamy o kolejnej praktycznej i przydatnej funkcji PowerShella, czyli importowaniu i eksportowaniu danych. Niezależnie od tego, czy tworzysz raporty, dzielisz się danymi z innymi, czy zapisujesz wyniki do późniejszej analizy, to umiejętność odczytu i zapisu plików jest dosłownie niezbędna. Dlatego w dalszej części artykułu dowiesz się dlaczego import i eksport danych jest tak istotny, jakie formaty plików obsługuje PowerShell oraz zobaczysz kilka praktycznych przykładów jak wykorzystywać dane w PowerShellu.
Dlaczego import i eksport danych są ważne?
W codziennej pracy administratora czy inżyniera DevOps dane stanowią kluczowy element każdego procesu. Skrypty rzadko działają w izolacji i zazwyczaj przetwarzają, analizują lub przekazują dane między systemami. Dlatego umiejętność ich importowania i eksportowania to podstawa efektywnej pracy.
W praktyce można spotkać się z trzema głównymi scenariuszami:
- Zapisywanie wyników działania skryptu – na przykład w celu dokumentacji, raportowania lub audytu. Dobrym przykładem jest sytuacja, w której skrypt monitorujący infrastrukturę zapisuje listę błędów do pliku CSV. Dzięki temu można później przeanalizować, które serwery najczęściej zgłaszały problemy lub kiedy występowały awarie. Taki plik można następnie wczytać w Excelu lub zaimportować do narzędzia raportującego, co znacznie ułatwia analizę.
- Udostępnianie danych między systemami lub zespołami – często różne aplikacje oczekują danych w określonych formatach. PowerShell umożliwia konwersję danych do CSV, JSON lub XML, dzięki czemu łatwo można je przekazać dalej, np. do systemu zarządzania konfiguracją czy interfejsu API.
- Wczytywanie danych z istniejących źródeł – w wielu przypadkach skrypt musi pobrać dane z pliku, by na ich podstawie wykonać określone operacje. Przykładem może być lista użytkowników w pliku CSV, którą wykorzystujesz do tworzenia kont w Active Directory.
Dzięki wbudowanym cmdletom PowerShell pozwala w prosty sposób integrować się z różnymi formatami danych i systemami. Co więcej, umożliwia łatwe filtrowanie, transformację i łączenie danych w trakcie ich przetwarzania. Import i eksport danych to zatem nie tylko techniczna umiejętność, ale element, który łączy automatyzację z analizą, raportowaniem i integracją systemów. Umiejętne wykorzystanie tych mechanizmów sprawia, że PowerShell staje się potężnym narzędziem do zarządzania informacją w całym środowisku IT.
Popularne formaty plików w PowerShell
PowerShell został zaprojektowany z myślą o pracy z różnorodnymi źródłami danych. Dzięki gotowym cmdletom obsługuje wiele popularnych formatów, które występują w codziennej pracy administratora. Znajomość ich mocnych i słabych stron pozwala dobrać właściwe narzędzie do konkretnego zadania. Poniżej zestawienie najważniejszych formatów:
Format CSV (.csv), czyli dane tabelaryczne
CSV (Comma-Separated Values) to jeden z najczęściej używanych sposobów przechowywania danych tabelarycznych. Każdy wiersz to jeden rekord, a kolumny oddzielone są przecinkami lub średnikami. CSV świetnie nadaje się do wymiany danych między PowerShellem a Excelem lub innymi aplikacjami, które nie potrzebują złożonych struktur.
Format JSON (.json), czyli dane strukturalne
JSON (JavaScript Object Notation) to lekki, czytelny dla człowieka i łatwy do przetwarzania przez maszyny format danych strukturalnych. Powszechnie używany w interfejsach API i aplikacjach webowych. W PowerShellu JSON sprawdza się doskonale przy wymianie danych z usługami sieciowymi lub w projektach DevOps, gdzie wiele narzędzi (np. Terraform, Ansible, Azure CLI) posługuje się właśnie tym formatem.
Format HTML (.html), czyli raporty i prezentacja danych
HTML (HyperText Markup Language) jest często wykorzystywany w PowerShellu do generowania raportów w przeglądarce. Polecenie ConvertTo-Html pozwala szybko przekształcić dane obiektowe w czytelne tabele, które można wysłać e-mailem lub umieścić w portalu intranetowym.
Format XML (.xml), czyli konfiguracje i integracje systemowe
XML (eXtensible Markup Language) to format często spotykany w konfiguracjach aplikacji, politykach systemowych czy komunikacji między systemami starszej generacji. W PowerShellu XML można łatwo przetwarzać, modyfikować i konwertować do innych struktur dzięki automatycznemu mapowaniu na obiekt .NET xml.
Pliki tekstowe (.txt, .log), czyli pozostałe dane niestrukturalne
Zwykły tekst to najprostszy sposób przechowywania danych, dzienników zdarzeń i wyników diagnostycznych. W środowisku produkcyjnym pliki .log są nieocenione przy analizie błędów i monitorowaniu procesów automatyzacji.
Jak zatem widzisz formatów jest kilka, ale PowerShell umożliwia płynne przechodzenie między nimi. Bez problemu można zaimportować dane z CSV, przetworzyć je w obiektach i wyeksportować do JSON lub HTML. Ta elastyczność sprawia, że PowerShell jest nie tylko językiem automatyzacji, ale też uniwersalnym narzędziem do wymiany i transformacji danych w środowiskach IT. Poniżej znajdziesz poglądowe porównanie omawianych formatów:
| Format | Zalety | Wady | Zastosowanie | Cmdlety |
|---|---|---|---|---|
| CSV | Prosty, czytelny, działa z Excelem | Brak wsparcia dla struktur zagnieżdżonych | Raporty, listy użytkowników, eksport danych | Import-Csv, Export-Csv |
| JSON | Strukturalny, lekki, idealny do API | Trudniejszy w analizie ręcznej | Integracje, automatyzacja, DevOps | ConvertTo-Json, ConvertFrom-Json |
| HTML | Czytelny wizualnie, łatwy do udostępnienia | Większy rozmiar, słaby do obróbki | Raporty, dashboardy, zestawienia | ConvertTo-Html, Out-File |
| XML | Ustrukturyzowany, zgodny z .NET | Rozbudowany, mało czytelny | Konfiguracje, starsze integracje | Export-Clixml , Import-Clixml |
| TXT / LOG | Uniwersalny, prosty, łatwy w logowaniu | Brak struktury, trudny do analizy | Logi, diagnostyka, rejestracja błędów | Out-File, Add-Content |
Eksportowanie danych
Eksportowanie danych w PowerShellu to jedna z podstawowych umiejętności, którą warto opanować już na początku pracy z tym narzędziem. Dlaczego? Bo PowerShell bardzo często służy do zbierania informacji o użytkownikach, komputerach, procesach, usługach czy konfiguracji systemu. Same dane w konsoli to jednak za mało. Administratorzy potrzebują ich w formie, którą można łatwo przeanalizować, udostępnić innym lub zaimportować do innego systemu. Dlatego dane eksportuje się do plików najczęściej CSV, JSON lub XML. Pozwala to:
- zachować wyniki skryptu
- przetwarzać je dalej (np. w Excelu lub innym narzędziu)
- tworzyć raporty dla siebie lub zespołu
W praktyce eksport to nic innego jak zapis danych obiektowych (które generuje PowerShell) do pliku w określonym formacie dzięki czemu można je później łatwo wczytać i wykorzystać ponownie. Poniżej zestawienie przykładów eksportu danych do konkretnych formatów:
Eksport do CSV
PS C:\Users\Admin> Get-Process | Select-Object Name, Id, CPU, WorkingSet |
Export-Csv -Path "C:\Raporty\Procesy.csv" -NoTypeInformation
Jak to działa?
Get-Processpobiera listę procesów z komputeraSelect-Objectwybiera tylko kilka właściwości każdego procesu, aby raport był czytelniejszyExport-Csvzapisuje dane do pliku CSVNoTypeInformationpomija wpis o typie obiektu ( w PowerShell 7+ jest to domyślne zachowanie)
Jak wyglądają dane?

💡Warto wiedzieć
Parametr
-DelimiterwExport-Csvpozwala kontrolować znak oddzielający kolumny. Domyślnie PowerShell używa przecinka, ale w polskich środowiskach Excel najczęściej oczekuje średnika, więc bez tego plik może otworzyć się niepoprawnie.-Delimiterjest też kluczowy przy różnego typu integracjach. Przykładowo wiele systemów wymaga tabulatora lub separatora|. Dobór właściwego delimitera znacząco ułatwia późniejszą analizę i eliminuje problemy z wczytywaniem danych.
Eksport do JSON
PS C:\Users\Admin> Get-Process | Select-Object Name, Id, CPU, WorkingSet |
ConvertTo-Json | Out-File -FilePath "C:\Raporty\Procesy.json"
Jak to działa?
Get-ProcessorazSelect-Objectidentycznie jak poprzednioConvertTo-Jsonkonwertuje obiekty do formatu JSONOut-Filezapisuje dane do pliku
Jak wyglądają dane?

Eksport do html
PS C:\Users\Admin> Get-Process | Select-Object Name, Id, CPU, WorkingSet |
ConvertTo-Html -Title "Lista procesów" -PreContent "<h2>Aktywne procesy w systemie</h2>" |
Out-File "C:\Raporty\Procesy.html"
Jak to działa?
Get-ProcessorazSelect-Objecttutaj również bez zmianConvertTo-Htmlzamienia dane obiektowe na tabelę HTML-Title "Lista procesów"ustawia tytuł dokumentu HTML widoczny w karcie przeglądarki-PreContent "<h2>Aktywne procesy w systemie</h2>"dodaje nagłówek HTML przed tabelą z danymiOut-Filezapisuje gotowy kod HTML do pliku na dysku
💡Warto wiedzieć
Wykonująć cmdlet
Invoke-Item -Path C:\Raporty\Procesy.htmlautomatycznie otworzysz plik html w przeglądarce internetowej
Jak wyglądają dane?

Eksport do xml
PS C:\Users\Admin> Get-Process | Select-Object Name, Id, CPU, WorkingSet |
Export-Clixml -Path "C:\Raporty\procesy.xml"
Jak to działa?
Get-ProcessorazSelect-Objectidentycznie jak poprzednioExport-Clixmlkonwertuje obiekty na XML i zapisuje do pliku
Jak wyglądają dane?

Eksport do pliku .txt/.log
PS C:\Users\Admin> Get-Process | Select-Object Name, Id, CPU, WorkingSet |
Out-File -FilePath "C:\Raporty\procesy.txt"
Jak to działa?
W zasadzie identycznie jak poprzednio jedyna różnica to inne rozszerzenie pliku przy wywołaniu cmdletu Out-File (w tym wypadku .txt). Oczywiście identycznie zadziała to w przypadku rozszerzenia .log.
Jak wyglądają dane?

Jak widzisz, PowerShell posiada całkiem rozbudowany system obsługi różnych formatów danych. Możesz bez problemu pracować z plikami tekstowymi, CSV, XML czy JSON, a każdy z tych formatów ma dedykowane polecenia i mechanizmy ułatwiające odczyt, zapis oraz konwersję danych. To, który wybierzesz, zależy oczywiście od Twoich preferencji, ale również od konkretnego scenariusza.
Operatory przekierowania
Mówiąc o eksportowaniu danych warto wspomnieć o operatorach przekierowania, które mogą stanowić alternatywną metodę zapisu do pliku, znaną głównie z klasycznych powłok, takich jak CMD czy Bash. PowerShell również umożliwia przekierowanie wyjścia poleceń do plików w ten sposób. To oznacza, że wynik (lub błąd) możesz łatwo zapisać bez użycia Out-File czy Set-Content. W ten sposób zyskujemy nieco szybsze wywołanie polecenia, a nasze dane zostają zapisane dokładnie w takiej formie, w jakiej byłyby wyświetlone w konsoli, tzn. z zachowaniem bieżącego formatowania. Zobaczmy przykład:
PS C:\Users\Admin> Get-Process | Select-Object Name, Id, CPU, WorkingSet >> "C:\Raporty\procesy.log"
Jak to działa?
Zauważ, że zamiast przekierowywać dane dalej w potoku, zastosowałem operator przekierowania i w ten sposób utworzyłem plik i dokonałem zapisu. Układ danych jest identyczny jak w konsoli.
Jak wyglądają dane?

Poniżej zestawienie najważniejszych operatorów:
| Operator | Co przekierowuje | Tryb zapisu | Opis działania |
|---|---|---|---|
> | Wynik polecenia (stdout) | Nadpisuje | Zapisuje wynik do pliku, usuwając wcześniejszą zawartość |
>> | Wynik polecenia (stdout) | Dopisuje | Dodaje wynik na końcu istniejącego pliku |
2> | Błędy (stderr) | Nadpisuje | Zapisuje tylko komunikaty błędów, nadpisując plik |
2>> | Błędy (stderr) | Dopisuje | Dopisuje komunikaty błędów do pliku |
*> / &> | Wszystkie strumienie | Nadpisuje | Zapisuje cały output (łącznie z błędami) do jednego pliku |
💡Warto wiedzieć
Operator
>>działa identycznie jak cmdletOut-Filez parametrem-Append, tzn. że nadpisuje dane.
Kiedy warto stosować?
- Gdy chcesz szybko zapisać wynik polecenia do pliku bez użycia cmdletów
- Do tworzenia lub dopisywania logów ze skryptów
- Przy gromadzeniu wyników z wielu iteracji lub serwerów w jednym pliku
- Podczas debugowania i testowania skryptów (np. przekierowanie błędów)
- Do zapisu danych w formacie dokładnie takim, jak w konsoli
- Przy przekierowywaniu różnych strumieni (standardowego, błędów, ostrzeżeń)
- W sytuacjach, gdy skrypt ma działać również w środowiskach zbliżonych do CMD lub Bash
Importowanie danych
PowerShell nie tylko pozwala eksportować dane, ale również je importować, czyli wczytywać do sesji informacje zapisane wcześniej w pliku. To niezwykle przydatne, gdyż w praktyce administratorzy rzadko pracują wyłącznie na danych generowanych w locie. Często muszą odczytać listę użytkowników z pliku CSV, konfigurację systemu zapisaną w XML, czy wyniki wcześniejszych analiz w JSON. W praktyce importowanie danych pozwala:
- automatyzować powtarzalne operacje
- odtwarzać stan środowiska z zapisanej konfiguracji
- analizować dane zebrane w innych narzędziach
- przekazywać dane między różnymi skryptami lub systemami
Import to nic innego jak wczytanie danych tekstowych z pliku i przekształcenie ich z powrotem w obiekty PowerShell, które można przetwarzać tak samo, jak dane pochodzące z poleceń systemowych. Dzięki temu cały cykl pracy, czyli eksport -> modyfikacja -> import staje się pełnym procesem zarządzania informacją w środowisku administratora. Zobaczmy teraz jak wygląda sprawa z importem różnych formatów danych do PowerShella:
Import pliku CSV
PS C:\Users\Admin> Import-Csv -Path "C:\Raporty\Procesy.csv"
Name Id CPU WorkingSet
---- -- --- ----------
AggregatorHost 7196 7163904
ApMsgFwd 13232 693.15625 1888256
ApntEx 8376 0.34375 1318912
Apoint 9824 230.296875 4837376
AppActions 10960 11.703125 21032960
ApplicationFrameHost 12604 10.796875 28385280
ApRemote 19852 0.09375 999424
audiodg 9948 0.875 22138880
BrCcUxSys 8428 0.671875 2428928
BrCtrlCntr 19576 0.890625 1970176
BrYNSvc 6648 2875392
chrome 4572 637.671875 131788800
chrome 7588 6074.21875 419487744
chrome 9400 45.0625 11280384
chrome 9568 1373.578125 126390272
chrome 11044 290.59375 283103232
Jak to działa?
Import-Csvwczytuje plik CSV i zamienia każdy wiersz na obiekt PowerShell- Teraz możesz pracować z tymi obiektami jak z wynikami dowolnego polecenia
Warto wiedzieć
💡Warto wiedzieć
W praktyce dane zazwyczaj wczytuje się do zmiennej, co znacząco ułatwia dalszą pracę z nimi. Dzięki temu możesz swobodnie analizować, filtrować czy modyfikować zawartość bez konieczności ponownego odczytu z pliku. Zdecydowanie łatwiej jest również przekazywać dane między poleceniami czy maszynami.
$procesy = Import-Csv -Path "C:\Raporty\Procesy.csv"
Import pliku JSON
PS C:\Users\Admin> $procesy = Get-Content -Path "C:\Raporty\procesy.json" | ConvertFrom-Json
Jak to działa?
Get-Contentwczytuje plik jako tekstConvertFrom-Jsonzamienia tekst JSON na obiekty PowerShell- wynik polecenia trafia do zmiennej
$procesy, co ułatwia dalszą prace z danymi
Import pliku xml
PS C:\Users\Admin> $procesy = Import-Clixml -Path "C:\Raporty\procesy.xml"
Jak to działa?
Import-Clixmlodczytuje plik XML zapisany wcześniej za pomocąExport-Clixml- podobnie jak poprzednio wynik importu trafia do zmiennej
$procesy
💡Warto wiedzieć
Import-Clixmlnie jest uniwersalnym parserem XML.
Odczyta wyłącznie pliki wygenerowane wcześniej przez Export-Clixml, ponieważ zawierają one dodatkowe metadane pozwalające PowerShellowi odtworzyć typy obiektów. Jeżeli potrzebujesz załadować dowolny plik XML (np. konfiguracje aplikacji, pliki systemowe, własne schematy), używasz:$xml = [xml](Get-Content "C:\Raporty\procesy.xml" -Raw)
Import zwykłego tekstu
W przypadku zwykłego tekstu (pliki .txt lub .log) sprawa wygląda nieco bardziej skomplikowanie i zwykle wymaga ręcznego parsowania. Jest to dość czasochłonne i podatne na błędy, dlatego większości przypadków warto pracować z innymi formatami, które automatycznie odwzorowywują dane na obiekty. Poniżej przykład prostego parsowania i zamiany tekstu na obiekty:
PS C:\Users\Admin> $procesy = Get-Content "C:\Raporty\procesy.txt" | ForEach-Object {
$line = $_ -replace '^\@\{|\}$'
$wlasciwosci = $line -split '; '
$objekt = @{}
foreach ($wlasciwosc in $wlasciwosci) {
$klucz, $wartosc = $wlasciwosc -split '='
$objekt[$klucz] = $wartosc
}
[PSCustomObject]$objekt
}
Jak to działa?
- Get-Content pobiera każdą linię z pliku
- każda linia ma postać:
@{Name=chrome; Id=4572; CPU=638.515625; WorkingSet=109629440} - usuwamy
@{i}i zostaje czysta lista właściwości - dzielimy po
;i otrzymujemy kolejne paryklucz=wartość - w każdej parze rozdzielamy klucz i wartość (dzieląc po
=) - dzięki pętli budujemy hashtable
- zamieniamy hashtable na [PSCustomObject], żeby pracować jak z normalnym obiektem
Kilka praktycznych przykładów
Archiwizacja logów do pliku tekstowego
Cel: kopiowanie lub prosta archiwizacja dziennych logów serwera
PS C:\Users\Admin> Get-WinEvent -ComputerName Serv_01 -LogName Setup > "C:\Raporty\Serv_01_Setup_$(Get-Date -Format yyyyMMdd).log"
Jak to działa?
Get-WinEventpobiera zdarzenia z logów systemowych Windows-ComputerName Serv_01wskazuje zdalny komputer, z którego mają zostać pobrane zdarzenia-LogName Setupokreśla konkretny dziennik zdarzeń, z którego pobierane są wpisy- operator
>zapisuje wynik do wskazanego pliku C:\Logs\Serv_01_Setup_$(Get-Date -Format yyyyMMdd).logtworzy dzienny plik logów z datą w nazwie
Kiedy może się przydać?
- potrzebujesz szybkiego, prostego eksportu logów do analizy
- tworzysz jednorazowe zrzuty
- prowadzisz lekki monitoring plikowy lub archiwizację zdarzeń poza systemem Event Log
O czym pamiętać?
- operator
>nadpisuje plik, więc przez chwilę nieuwagi łatwo utracić dane - eksport do pliku tekstowego nie jest niezawodnym systemem logowania czy archiwizowania
- w produkcji logi zazwyczaj trafiają do SIEM (Sentinel, Splunk, Elastic), WEF lub centralnych systemów agregujących
Import listy użytkowników AD z pliku CSV
Cel: proste i szybkie tworzenie nowych użytkowników AD
$users = Import-Csv -Path "C:\Import\New_Users.csv"
foreach ($user in $users) {
New-ADUser -Name $user.Name -SamAccountName $user.Username -AccountPassword (ConvertTo-SecureString $user.Password -AsPlainText -Force) -Enabled $true
}
Jak to działa?
Import-Csvwczytuje plik i zamienia każdy wiersz na obiekt użytkownikaforeachprzechodzi po każdym rekordzie z listy (po każdym użytkowniku)New-ADUsertworzy konto na podstawie danych z CSV (Name, Username, Password)ConvertTo-SecureStringzamienia jawne hasło z pliku na format akceptowany przez AD-Enabled $trueaktywuje konto od razu po utworzeniu (domyślnie konta są blokowane)
Dlaczego może przydać?
- masowe zakładanie kont (np. onboarding nowych pracowników, sezonowe rekrutacje, stażyści)
- migracje, reorganizacje działów, testowe środowiska labowe
- automatyczne przygotowanie kont do szkoleniowych
O czym pamiętać?
- unikaj przechowywania haseł w plikach, po założeniu konta konieczność zmiany przez użytkownika
- warto walidować unikatowość
SamAccountName, żeby nie nadpisać istniejących kont - plik CSV musi mieć poprawne nagłówki i czyste dane, czasami literówki powodują błędy przy tworzeniu kont
Podsumowanie
Umiejętność czytania i zapisywania danych w plikach to krok w stronę profesjonalnego skryptowania oraz automatyzacji zadań. Swoją przygodę rekomendowałbym zaczać od CSV, bo jest najprostszy i najczęściej używany. Później można eksperymentować z JSON, XML czy html w zależności od konkretnych potrzeb.
Praca domowa
W ramach pracy domowej wykonaj wszystkie polecenia, które pojawiły się w tym wpisie.
Daj znać, który format najlepiej Ci podpasował.
To wszystko na dziś!
Jeśli masz ciekawe spostrzeżenia lub doświadczenia w tym temacie – koniecznie podziel się nimi w komentarzach.
A jeśli moje materiały są dla Ciebie pomocne, możesz postawić mi wirtualną kawę.
Dzięki za wsparcie!


Adam Pietrzak
Administrator | Trener i autor szkoleń | Entuzjasta PowerShellaAdministrator systemów i sieci wsparcia działań wojskowych z ponad 10-letnim doświadczeniem. Praktyk w dziedzinie zarządzania Active Directory, bezpieczeństwa systemu Windows oraz automatyzacji zadań (PowerShell). Trener i twórca materiałów edukacyjnych (szkolenia, warsztaty, artykuły, podręczniki). Pasjonat dzielenia się wiedzą i wspierania początkujących administratorów IT. Prywatnie – amator aktywnego wypoczynku i rodzinnych podróży.

