Windows PowerShell : Les rapports revisités

Les rapports textuels peuvent être ennuyeux et moins instructifs. Dans ces conditions, pourquoi ne pas utiliser Windows PowerShell pour générer des rapports HTML ?

Don Jones

Si vous envisagez de générer des rapports avec Windows PowerShell, les rapports HTML autonomes sont une bien meilleure solution que les rapports basé sur du texte. Ma préférence vient du fait que des rapports HTML sont beaucoup plus faciles à créer, regarder tellement mieux que le texte brut et sont toujours faciles à joindre à un courriel et envoyer vers le Bureau.

Il y a plusieurs mois cette colonne, je vous ai donné quelques conseils pour produire des rapports HTML dans Windows PowerShell. Ce mois-ci, voyons comment vous pouvez améliorer ces rapports.

Nous allons juste passer directement à la le code qui apparaît dans Figure 1. Il doit être enregistré dans un fichier de script, tels que C:\Report.ps1.

La figure 1 améliorer ces rapports HTML Windows PowerShell.

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>"

Vous exécuterez le rapport Figure 1 comme suit :

C:\Report –computername localhost > output.htm

Voici ce que j'ai fait, vous pouvez le voir je suis en utilisant Get-WmiObject de trois appels pour récupérer des bits d'information. Chaque fois, j'utilise Select-Object pour sélectionner les propriétés qui m'intéresse. Dans la plupart des cas, je vais créer des colonnes personnalisées donc comme la mémoire, les valeurs sont affichées dans une unité plus commode de mesure.

À la fin de chacun, j'utilise pour produire un fragment HTML ConvertTo-HTML. Cela signifie que j'obtiens juste le code HTML nécessaire pour produire une table avec mes propriétés souhaitées.

Il y a un truc qui m'a pris beaucoup de temps à découvrir. ConvertTo-HTML produit des trucs bizarres. Fondamentalement, il produira des collections de chaînes. Essayez d'alimentation que pour le final ConvertTo-HTML et vous obtiendrez une erreur.

J'ai travaillé sur le problème à l'aide Out-String. Vous pouvez le voir dans chacun des trois premiers blocs, où je suis tuyauterie le fragment HTML à Out-String. Cela garantit que chaque fragment est juste un bouquet de chaînes simples. Comme je crée chaque fragment HTML, je l'ajouter dans la variable b $.

Vous remarquerez également que j'utilise ConvertTo-HTML pour appliquer des en-têtes de section à ces fragments HTML. Normalement, ConvertTo-HTML insère juste que le contenu « pré » en texte brut. J'ai ajouté le <h2> Les balises HTML pour mes en-têtes de section apparaissent comme des rubriques dans le code HTML.

Après la construction des trois blocs, créer une feuille de style HTML incorporée. C'est où vous pouvez jouer avec les styles pour obtenir le look que vous voulez pour le rapport final. Vérifier la référence de le langage de feuille de Style en cascade (CSS) pour les feuilles de style en plus. Tant que vous pouvez vivre avec style relativement simple, CSS n'est pas trop compliqué.

La dernière ligne de mon script utilise une finale ConvertTo-HTML. I insérer la feuille de style dans l'en-tête de la page HTML, ajoutez un titre global de la page et insérer le contenu de $b. Le final HTML dans Internet Explorer peut être vu dans Figure 2.

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

La figure 2 après avoir modifier les feuilles de style et de conversion de sortie en HTML, c'est le résultat.

Voici quelques autres astuces, que je tiens à souligner :

  1. Dans mes deux premières commandes Select-Object avis que j'ai utilisé une syntaxe hashtable pour construire les propriétés des sorties personnalisées. Dans la plupart des cas, je vais juste créer un jolie nom pour les colonnes de sortie. Dans les trois cas, cependant, je fais des maths pour convertir les octets en gigaoctets.
  2. Dans le premier bloc où j'interroger Win32_ComputerSystem, je vais avoir ConvertTo-HTML format les informations dans une liste au lieu du style de tableau par défaut (le paramètre de liste d'avertissement). Parce que la sortie portera uniquement sur un système informatique unique, je pensais que la liste semblait plus belle.
  3. J'ai eu à duper autour de la feuille de style un peu pour qu'il recherche comme je voulais. CSS est puissant, mais il peut prendre un peu de peaufinage pour obtenir le style exact que vous voulez.

Vous vous demandez peut-être pourquoi le script lui-même n'est pas rediriger la sortie finale vers un fichier, et ce serait une bonne question. Mon script laisse le code HTML dans le pipeline Windows PowerShell, ce qui signifie que je n'ai pas à mettre dans un fichier, si je le ferais plutôt quelque chose d'autre.

Par exemple, j'ai écrit une fonction personnalisée qui me permet de tuyau dans le code HTML. Il construit un message au format HTML de ce contenu. En ayant mon script de laisser le code HTML dans le pipeline, je peux le code HTML de tuyau à ma fonction d'envoi de courrier électronique, tuyau le code HTML dans un fichier ou faire quoi je veux avec elle. Tout simplement sortie HTML me laisse avec le plus grand nombre d'options.

Par-dessus tout, je n'ai pas utilisé Write-Host. Write-Host envoie la sortie directement à l'écran. Il vous ne donne aucune options pour rediriger vers un fichier, le transformer en un message électronique ou toute autre chose.

Parce que je suis en utilisant ConvertTo-HTML, Windows PowerShell est fait tout le travail de formatage en fait ma sortie. Je n'avais pas de tromper, soit. Par tout simplement jouer avec le CSS, je peux facilement changer l'apparence de la sortie finale.

Vous pouvez même insérer une feuille de style pour l'affichage à l'écran et une feuille de style distincte pour la sortie imprimée. De cette façon, si une personne imprime votre rapport, ils peuvent avoir mise en forme appropriée pour la version papier. Pour ce faire, simplement construire votre feuille de style comme Figure 3.

Figure 3 les feuilles de style différentes permettant à l'écran affichage et la sortie imprimée.

$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> '@

C'est une excellente façon de générer des rapports car il exploite vraiment les patrons et les techniques de Windows PowerShell. Il est facile de prolonger un rapport pour inclure des informations supplémentaires. Le script qui produit le rapport est relativement facile à suivre pour quelqu'un d'autre qui pourrait faire l'entretien. Et chaque section du rapport est produite par une ligne de commande Windows PowerShell unique (quoique longue), donc ils sont faciles à réorganiser, à réutiliser et à réutiliser.

Don Jones

**Don Jones**est un Microsoft MVP lauréat et auteur de « Apprendre Windows PowerShell dans un mois de repas » (Manning Publications, 2011), un livre conçu pour aider à tout administrateur de devenir efficace avec Windows PowerShell. Jones offre également le publique et sur les lieux de formation Windows PowerShell. Communiquer avec lui par le biais de son site Web à ConcentratedTech.com.

Contenu connexe