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:
Ú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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://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>
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>
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