Seriál Windows PowerShell: Export do HTML (část 55.)

Poslední dobou pracuji více a více s reporty. Zákazníci evidentně chtějí reportovat svou práci a PowerShell je možností, jak si zkrátit čas potřebný pro tvorbu status mailů. Na školeních se mi stalo již několikrát, že následující (nebo podobný) one-liner způsobil u mých posluchačů údiv/úsměv/úžas/úlek J

PS C:\Temp> gps | Sort vm -desc | Select -First 5 -Property ProcessName, VM, Id | ConvertTo-Html | Out-File .\flash.html; ii .\flash.html

Výsledkem je otevření tohoto souboru:

image

Úmyslně jsem použil aliasy – zkušený čtenář toho Technet Flashe by měl být schopen většinu správných cmdletů identifikovat.

Dnes bych se chtěl věnovat cmdletu ConvertTo-Html. Tento cmdlet má několik zajímavých parametrů, které nám ulehčí tvorbu výsledného HTML kódu. Vše si ukážeme na následujícím krátkém kódu:

PS C:\temp> Get-Process -Name powershell | Select -Property ProcessName, Id, VM

ProcessName Id VM
----------- -- --
powershell 7284 638828544

a výstup budeme konvertovat.

PS C:\temp> Get-Process -Name powershell | Select -Property ProcessName, Id, VM | ConvertTo-Html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/></colgroup>
<tr><th>ProcessName</th><th>Id</th><th>VM</th></tr>
<tr><td>powershell</td><td>7284</td><td>636764160</td></tr>
</table>
</body></html>

Pokud výstup uložíte do souboru, dostanete HTML soubor, který můžete dále sdílet. Pokud ovšem chcete výsledek cmdletu přidat jako součást většího reportu, hodí se následující parametr.

PS C:\temp> Get-Process -Name powershell | Select -Property ProcessName, Id, VM | ConvertTo-Html -Fragment

<table>
<colgroup><col/><col/><col/></colgroup>
<tr><th>ProcessName</th><th>Id</th><th>VM</th></tr>
<tr><td>powershell</td><td>7284</td><td>635437056</td></tr>
</table>

Vidíte, že z výsledného souboru se opravdu zapsal pouze fragment s výslednou tabulkou. Pokud bychom si tuto tabulku uložili do proměnné, můžeme je ve výsledku spojovat dohromady a tím dosáhnout reportu s více tabulkami pod sebou.

Další možností je vložit výsledek jako list a nikoli jako tabulku.

PS C:\temp> Get-Process -Name powershell | Select -Property ProcessName, Id, VM | ConvertTo-Html -Fragment -As List

<table>
<tr><td>ProcessName:</td><td>powershell</td></tr>
<tr><td>Id:</td><td>7284</td></tr>
<tr><td>VM:</td><td>636502016</td></tr>
</table>

image

Jindy se vám bude hodit možnost přidat před (nebo za) výsledný report nějaký přidaný text. Toho lze dosáhnout pomocí parametrů PreContent a PostContent.

PS C:\temp> Get-Process -Name powershell | Select -Property ProcessName, Id, VM | ConvertTo-Html -Fragment
-PreContent '<h3>Seznam spustenych PowerShell procesu</h3>'
-PostContent '<b>V predchozi tabulce je zobrazen seznam spustenych PowerShell procesu</b>'

<h3>Seznam spustenych PowerShell procesu</h3>
<table>
<colgroup><col/><col/><col/></colgroup>
<tr><th>ProcessName</th><th>Id</th><th>VM</th></tr>
<tr><td>powershell</td><td>7284</td><td>643567616</td></tr>
</table>
<b>V predchozi tabulce je zobrazen seznam spustenych PowerShell procesu</b>

image

V rámci těchto parametrů můžete použít HTML tagy a tím pádem ještě o trochu vylepšit grafickou reprezentaci zamýšleného reportu.

Pokud se podíváte do nápovědy pro cmdlet ConvertTo-Html jistě si všimnete i parametrů Head, Title a Body. Pomocí nich specifikujete částí HTML souboru.

Celá krása představeného přístupu vynikne ve spojení s cmdletem Send-MailMessage. Tento cmdlet má parametr, kterým říkáme, že tělo mailu je v HTML formátu. Proto můžeme předchozí report poslat mailem následující sadou příkazů. V proměnné $bodymáme uložený výstup předchozího příkazu:

PS C:\temp> Send-MailMessage -Body $body -BodyAsHtml -To <mail> -SmtpServer <server> -From <from> -Subject 'PowerShell procesy'

Pokud uvedeme správný parametr pro SmtpServer, bude mail poslán danému příjemci a v těle mailu bude uvedena tabulka z předchozího příkladu.

Doporučoval bych vám podívat se podrobněji na použití cmdletu ConvertTo-Html. Jeho využití je opravdu široké a sami nyní nevíte, kdy se vám může hodit.

Pokud by vás zajímalo, co se plánuje nového do PowerShellu v5, přijďte na konferenci FRESH IT, kde se s vámi podělím o některé z plánovaných novinek. Ukážeme verzi z února tohoto roku, což je zatím nejnovější release. Věřte, že je na co se těšit

David Moravec, MVP
Mainstream Technologies