Posted in: Základy PowerShellu

Exporty

PowerShell, respektive jeho moduly, umí opravdu rozličné množství exportů a výpisů, ale zde mi jde o export výstupu libovolného příkazu, nikoliv například certifikátu. Nejjednodušší možností je přesměrování konzole do souboru, což se provede příkazem out-file. Například seznam běžících procesů do souboru procesy.txt na ploše uložím takto:

get-process | Out-File $env:USERPROFILE\Desktop\procesy.txt

Lepší je využít export o nějakého dále zpracovatelného formátu, jako je CSV nebo XML.

Export do CSV

K exportu výstupu do CSV slouží příkaz Export-CSV, modifikací příkladu výše pro výstupní formát CSV je následující příkaz:

get-process | Export-Csv $env:USERPROFILE\Desktop\procesy.csv -Encoding UTF8 -Delimiter ";" -NoTypeInformation

Pojďme si to rozebrat. CSV jako výchozí oddělovač využívá čárku, ale v českém jazykovém prostředí se běžně využívá středník, aby se správně uložila desetinná čísla. Parametr Delimiter umí nastavit, právě znak, který je oddělovačem, pokud parametr nevyužijeme, bude SCV využívat čárku jako oddělovač. Dalším parametrem je Encoding, který udává, jaké kódování se užije, bez uvedení přebírá výchozí kódování OS, doporučuji využívat UFT-8, protože je dobře přenosné mezi aplikacemi i systémy. Posledním je důležitý parametr NoTypeInformation, který do výstupu nezapíše na první řádek informace o typu objektu (TypeName). Pokud tento parametr zapomeneme, na první řádek se zapíše typ objektu, v našem příkladu by to bylo: System.Diagnostics.Process Tento řádek pak ztěžuje zpracování souboru dále např. v Excelu, kdy musí být při importu odebrán. Kde naopak je dobré jej mít, je následné zpracování pomocí PowerShellu.

Export do XML

Zde je situace dost podobná jako v případě CSV. Náš příklad s procesy by vypadal následovně:

Get-Process | Export-Clixml -Path $env:USERPROFILE\Desktop\procesy.xml -Encoding Unicode

Export do JSON

Dnes velmi populární datový formát JSON má rovněž v PowerShellu podporu. Bohužel zde není přímý příkaz exportu, ale postup je takový, že výstup se zkonvertuje pomocí příkazu ConvertTo-Json do objektu, který je vnitřně JSON a ten se uloží do souboru pomocí Out-File. Náš příklad s procesy by tedy vypadal následovně:

Get-Process | ConvertTo-Json | Out-File -FilePath $env:USERPROFILE\Desktop\procesy.json

Konverze do HTLM

Jedním z dobrý „exportů“ větších tabulek a dlouhých výpisů může být HTML, které je dobře čitelné po zobrazení v prohlížeči a rovněž prezentovatelné další lidem. I zde využíváme, podobně jako u JSON, konverzi a následné uložení do souboru. Pokud bychom využili samotné ConvertTo-HTML, dostaneme výstup, který je vidět na následujícím obrázku.

Náš příklad by pro uložení v podobě tabulky webové stránky vypadal následovně:

Get-Process | ConvertTo-Html | Out-File $env:USERPROFILE\Desktop\procesy.html

Možností pro ConvertTo je ještě o něco více a využívají se běžně uvnitř samotného kódu skriptů, ale již ne jako export v rozšířeném formátu. O těchto možnostech zase někdy jindy.

Back to Top