Powershell: eksportowanie wyniku do pliku CSV lub HTM oraz opcje formatowania
Niezwykle istotną i często używaną funkcją skryptów jest zachowywanie wyników w pliku. Czasem robimy to, by mieć loga z jakichś zdarzeń, innym razem przy przekazać komuś zestawienie pewnych informacji. Każdy Admin jednak wie, że przeglądanie dużej ilości danych w konsoli jest po prostu niewygodne i trzeba je zapisać w bardziej czytelnej formie (dla przypomnienia, podobny artykuł o CMD). Powershell pozwala zapisywać wyniki w plikach CSV lub HTM oraz dokładnie sprecyzować, które kolumny mają się tam znaleźć. Przedstawię to na przykładzie opisywanego kiedyś polecenia „get-process”, które wyświetla podstawowe informacje o aktywnych procesach.
Okazuje się, że większość cmdletów zawiera znacznie więcej informacji, niż to, co wyświetlają w swojej podstawowej formie.
To polecenie zachowa wynik w pliku csv:
Jakiś cmdlet | export-csv ścieżka do pliku .csv
Na przykład:
get-process | export-csv c:\procesy.csv
Wpisując to polecenie, nic nie zobaczymy na ekranie, ale zaglądając do wyeksportowanego pliku możemy się bardzo miło zdziwić:
Plik zawiera całe mnóstwo kolumn (oczywiście zależnych od głównego cmdlet’u jaki użyliśmy – tu znajdziecie wszystko o procesach) – podaję same tytuły kolumn:
..a tak sformatujecie wynik do formatu HTM i zapiszecie go:
get-process | ConvertTo-HTML > C:\procesy.htm
W tym wypadku akurat ścieżka jest opcjonalna – nie podając jej zobaczymy wynik razem z tagami html (co oczywiście będzie prawie nieczytelne w konsoli PS)
I teraz najzabawniejsza część tego artykułu: Czy musimy produkować pliki z tak wieloma kolumnami?
Oczywiście, że nie. Możemy sprecyzować, które kolumny będą widoczne w pliku wynikowym: – na przykład tylko nazwa i wątki (handles):
get-process | ConvertTo-HTML -Property Name,Handles
Oto fragment pliku wynikowego:
Czujecie potęgę Powershella i głód dalszych porad? Na pewno takowe będą – zaglądajcie na nasz Blog 🙂 Jeśli macie coś ciekawego do dodania w tym temacie – piszcie śmiało.
Łukasz … czemu przykłady które zamieszczasz są typowymi przykładami książkowymi jakich pełno na innych stronach ? wszędzie tylko Get-Process lub Get-Service
Z kilku powodów: ciągle trafiam na osoby, którym trzeba te podstawy przekazać (koniecznie po polsku), a polskich Blogów z powershellem wcale nie ma tak dużo. Poza tym, pisząc o bardziej zaawansowanych rzeczach, nieraz trzeba podlinkować pewne podstawy – na przykład właśnie jak się eksportuje dane, by w każdym artykule tego samego nie tłumaczyć 🙂
Jutrzejszy artykuł zawiera jeszcze prostsze podstawy, więc od razu ostrzegam 🙂
Jaki bardziej zaawansowany temat by Ciebie interesował?
Operacje na danych tekstowych: zamiana ciągów znaków, wyszukiwanie ciągów ( cos jak grep np.: [….|where {$_ -match „*.aspx”}……]); operacje na tablicach… tez z danymi textowymi,operacje na kontach użytkowników AD … znowu dane txt…, itp.
Ewentualnie coś o obsłudze klastrów, i nowego rozwiązania terminali w 2012 RD Gateway+ RC ConnectionBroker (HA); RD SessionHosts ….
Greg, Na pewno ucieszy Cię fakt, że artykuł ciągach znaków (z bardzo interesującą fotką) jest już w drafcie u Piotra. Stay Tuned.
A Ja mam mały problem, ponieważ wpisuje taką komendę:
PS C:Windowssystem32> Get-ChildItem D:jakis_folder, format-table BaseName | ConvertTo-HTML > D:jakis_folderrozne_bazypsjakis_plik.htm
i nie działa mi ta ścieżka, generalnie BaseName to nazwa kolumny którą chcę żeby tylko ona się wyświetliła, a to: D:jakis_folderrozne_bazypsjakis_plik.htm to jest ścieżka gdzie chcę aby wynik się zapisał….
Ok, udało się…trzeba było Property BaseName dopisać na końcu całej komendy…
Teraz kombinuje jak zrobić sobie plik bat który będzie to robił ale z poziomu mojego pulpitu…sorry że tak pisze ale to mi pomaga…;)
czy dla plików csv można dać parametr separator średnik zamiast przecinek, bo wtedy Excel daje do rożnych kolumn.
Użyj przłącznika Delimiter: ConvertTo-Csv -Delimiter „;”