Windows PowerShell: Berichte unter neuen Gesichtspunkten

Textbasierte Berichte können langweilig und wenig informativ sein. Warum also generieren Sie keine HTML-Berichte mit Windows PowerShell?

Don Jones

Wenn Sie mit Windows PowerShell Berichte zu erzeugen, sind eigenständige HTML-Berichten eine viel bessere Alternative als Text-basierte Berichte. Meine Vorliebe besteht darin, die HTML-Berichte sind deutlich einfacher zu erstellen, so viel schöner als nur-Text zu suchen, und sind immer noch leicht an eine E-mail Anhängen und rund um das Büro senden.

Vor einigen Monaten dieser Spalte, ich habe Ihnen einige Tipps für die Herstellung von HTML-Berichten in Windows PowerShell. Diesen Monat schauen wie Sie diese Berichte verbessern können.

Lassen Sie uns nur direkt in den Code, der in dargestellt ist direkt Abbildung 1. Es sollte in einer Skriptdatei, z. B. C:\Report.ps1 gespeichert werden.

Abbildung 1 Diese HTML Windows PowerShell-Berichte verbessern.

param([string]$computername) $b = Get-WmiObject -class Win32_ComputerSystem -ComputerName $computername | Select-Object -Property Manufacturer,Model, @{n='Memory(GB)';e={$_.TotalPhysicalMemory / 1GB -as [int]}}, @{n='Architecture';e={$_.SystemType}}, @{n='Processors';e={$_.NumberOfProcessors}} | ConvertTo-HTML -Fragment -As LIST -PreContent "<h2>Computer Hardware:</h2>" | Out-String $b += Get-WmiObject -class Win32_LogicalDisk -ComputerName $computername | Select-Object -Property @{n='DriveLetter';e={$_.DeviceID}}, @{n='Size(GB)';e={$_.Size / 1GB -as [int]}}, @{n='FreeSpace(GB)';e={$_.FreeSpace / 1GB -as [int]}} | ConvertTo-Html -Fragment -PreContent "<h2>Disks:</h2>" | Out-String $b += Get-WmiObject -class Win32_NetworkAdapter -ComputerName $computername | Where { $_.PhysicalAdapter } | Select-Object -Property MACAddress,AdapterType,DeviceID,Name | ConvertTo-Html -Fragment -PreContent "<h2>Physical Network Adapters:</h2>" | Out-String $head = @' \<style\> body { background-color:\#dddddd; font-family:Tahoma; font-size:12pt; } td, th { border:1px solid black; border-collapse:collapse; } th { color:white; background-color:black; } table, tr, td, th { padding: 2px; margin: 0px } table { margin-left:50px; } \</style\> '@ ConvertTo-HTML -head $head -PostContent $b -Body "<h1>Hardware Inventory for $ComputerName</h1>"

Würden Sie den Bericht ausführen, Abbildung 1 wie folgt:

C:\Report –computername localhost > output.htm

Hier ist was ich getan habe — Sie können sehen, ich bin benutze drei Aufrufe von Get-WmiObject zu verschiedenen Bits von Informationen abrufen. Jedes Mal, verwende Select-Object ich um die Eigenschaften auszuwählen, in die ich mich interessiere. In den meisten Fällen bin ich benutzerdefinierte Spalten erstellen, so dass Werte wie Speicher in ein bequemer Maßeinheit angezeigt werden.

Am Ende der einzelnen verwende ich ConvertTo-HTML ein HTML-Fragment zu produzieren. Dies bedeutet, dass bekomme ich nur den HTML-Code benötigt, um eine Tabelle mit meinem gewünschten Eigenschaften zu produzieren.

Es gibt einen Trick hier, der mich eine lange Zeit nahm, herauszufinden. ConvertTo-HTML erzeugt einige seltsame Dinge. Im Grunde wird es Sammlungen von Zeichenfolgen erzeugen. Versuchen Sie, Fütterung, die für die endgültige ConvertTo-HTML und Sie erhalten eine Fehlermeldung.

Ich habe gearbeitet, um das Problem mit out. Können Sie dies in jedem der ersten drei Blöcke, wo ich das HTML-Fragment Rohrverlegung bin zu out. Dadurch wird sichergestellt, dass jedes Fragment nur ein paar einfache Zeichenfolgen ist. Da ich jede HTML-Fragment erstellt haben, fügen ich es in die Variable $b.

Sie werden auch bemerken, dass ich ConvertTo-HTML mit Abschnittsüberschriften auf diese HTML-Fragmente anwenden. Normalerweise fügt ConvertTo-HTML nur, dass "Pre-Inhalte" als Klartext. Ich habe <h2> HTML-tags so dass meine Abschnittsheader als Überschriften in HTML angezeigt werden.

Nach dem Bau der drei Blöcke, erstelle ich ein eingebettetes HTML-Stylesheet. Dies ist, wo Sie spielen können, mit Stilen den Blick zu erhalten, die, den Sie für den endgültigen Bericht verwenden möchten. Überprüfen Sie den Verweis auf die Sprache Cascading Style Sheet (CSS) für mehr auf Stylesheets. Solange Sie mit relativ einfachen Styling leben können, CSS ist nicht zu kompliziert.

Die letzte Zeile des Skripts verwendet eine endgültige ConvertTo-HTML. I legen Sie das Stylesheet in der HTML-Seitenkopf, hinzufügen eine allgemeine Überschrift für die Seite und fügen Sie den Inhalt von $b. Das endgültige HTML in Internet Explorer kann man in Abbildung 2.

After modifying the style sheets and converting output to HTML, this is the result

Abbildung 2 nach dem Ändern der Stylesheets und Ausgabe in HTML konvertieren, dies ist das Ergebnis.

Hier sind ein paar andere Tricks, die ich hinweisen möchte:

  1. Beachten Sie in meinen ersten beiden Select-Object Befehle, dass ich habe eine Hashtable-Syntax verwendet, um benutzerdefinierte Eigenschaften zu erstellen. In den meisten Fällen bin ich nur ein Better-Looking Name für Ausgabespalten erstellen. In drei Fällen mache ich jedoch einige mathematische Konvertieren von Byte in Gigabyte.
  2. Im ersten Block wo ich Win32_ComputerSystem Abfragen, habend ConvertTo-HTML formatieren die Informationen in einer Liste statt das Standardtabellenformat (einer Listenparameter). Da die Ausgabe nur ein einzelnes Computersystem behandelt wird, dachte ich, die Liste sah schöner aus.
  3. Ich musste mit dem Stylesheet ganz ein wenig herumspielen um zu ankommen es sah aus wie ich wollte. CSS ist mächtig kann, aber es ein Bit des Zwickens um den genauen Stil, die, den Sie wollen.

Sie Fragen sich vielleicht, warum das Skript selbst nicht die endgültige Ausgabe in eine Datei umleiten, und das wäre eine gute Frage. Mein Script lässt den HTML-Code in der Windows PowerShell-Pipeline, was, dass ich nicht habe bedeutet, steckte es in eine Datei, wenn ich lieber etwas anderes tun.

Ich habe z. B. eine benutzerdefinierte Funktion, die lässt mich geschrieben Rohr im HTML-Format. Es erstellt eine HTML-formatierte E-mail-Nachricht aus, dass der Inhalt. Da mein Skript der HTML-Code in der Pipeline zu verlassen, ich kann Rohr den HTML-Code zu meiner e-Mail-senden-Funktion, leiten Sie den HTML-Code in eine Datei oder tun, was ich mit ihm wollen. Einfach HTML ausgeben lässt mich mit der größten Anzahl von Optionen.

Ich habe nicht vor allem Write-Host verwenden. Write-Host sendet die Ausgabe direkt auf den Bildschirm. Es gibt Ihnen keine Optionen umgeleitet, die zu einer Datei, es in einer E-mail-Nachricht oder irgendetwas anderes zu verwandeln.

Weil ich ConvertTo-HTML benutze bin, tut Windows PowerShell die Arbeit tatsächlich meiner Ausgabe zu formatieren. Ich habe nicht, entweder zu täuschen. Von einfach Durcheinander mit CSS, kann ich das Aussehen der endgültigen Ausgabe leicht ändern.

Sie können auch Insert ein Stylesheet für die Bildschirmanzeige und einem separaten Stylesheet für die Druckausgabe. Auf diese Weise wenn jemand den Bericht druckt, sie können Formatierungen, die für Hardcopy geeignet ist. Hierzu nur bauen Ihr Stylesheet wie Abbildung 3.

Abbildung 3 unterschiedlichen Stylesheets ermöglichen für on-screen Display und gedruckte Ausgabe.

$head = @' \<style media='screen'> body { background-color:#dddddd; font-family:Tahoma; font-size:12pt; } td, th { border:1px solid black; border-collapse:collapse; } th { color:white; background-color:black; } table, tr, td, th { padding: 2px; margin: 0px } table { margin-left:50px; } </style> <style media='print'> // Put alternate hardcopy styles here </style> '@

Dies ist eine großartige Möglichkeit, um Berichte zu erstellen, da es wirklich die Muster und Techniken von Windows PowerShell nutzt. Es ist einfach einen Bericht zusätzliche Informationen erweitern. Das Skript, das den Bericht erstellt ist relativ einfach für jemand anderen zu folgen, der möglicherweise die Wartung zu tun. Und jeder Abschnitt des Berichts ist von einer einzigen (wenn auch langwierigen) Windows PowerShell-Befehlszeile produziert, so dass sie leicht zu ordnen, Neuzuweisung und Wiederverwendung.

Don Jones

**Don Jones**ist ein Microsoft MVP Award Empfänger und Autor von "Lernen Sie Windows PowerShell in ein Monat der Mittagessen" (Manning Publications, 2011), ein Buch so konzipiert, dass jeder Administrator mit Windows PowerShell wirksam zu helfen. Jones bietet öffentlichen und vor-Ort-Training an Windows PowerShell. Sie erreichen ihn über seine Website auf ConcentratedTech.com.

Verwandte Inhalte