Bis jetzt habe ich eine Offline-HTML-Intranetseite erzeugt. Jetzt fehlen noch so Angaben, wie Anzahl der Drucker pro Server, der Zeitpunkt der Erzeugung der Liste, die Ip-Adressen der Drucker als Link einbinden und natürlich die Suchfunktion. Sozusagen eine Offline-HTML-Intranetseite für verwöhnte Puristen ……..
Packen wir es an.
Um weitere Angaben in die ConvertTo-Html-Ausgabe zu bekommen, gibt es die Parameter PreContent und PostContent.
PreContent wird vor der HTML-Tabelle ausgegeben, der PostContent danach.
Da die Anzahl der Drucker pro Server oberhalb stehen soll, erzeuge ich jetzt eine Variable „$prec“ mit dem gewünschten Inhalt.
Die Anzahl der Drucker bestimme ich mit „Measure-Object“
Der erste Teil der Routine:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$prec = "Anzahl Drucker pro Server.<br>`r`n" $prec = $prec + "| " For ($i=0; $i -lt $Servername.Length; $i++) { $Server=$Servername[$i] $File=$Servername[$i]+".csv" Get-WmiObject -class Win32_Printer -Computer "$Server.firma.lan" | select Name, PortName, Sharename, Location, Systemname |Export-Csv C:\___skript\"$File" (Get-content $File | Select-Object -Skip 2) | Set-Content $File (Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch) | Set-Content $File Get-content $File |add-content C:\___skript\komplett.csv $measure = ((Get-Content $File) |Measure-Object) $lines = $measure.Count $prec = $prec + $Server.ToUpper() + " = " + $lines + " | " Remove-item $File } |
Was hier auffällt ist die Abänderung der Abfrage, denn bisher habe ich die „komplett.csv“ von den ungewünschten Druckern bereinigt. dies passiert jetzt sofort bei der Abfrage, damit ich die richtige Anzahl der Drucker bekomme.
Fehlt noch die restliche Angabe: Der Zeitpunkt der Listengenerierung:
1 2 3 4 |
$prec = $prec + "<br>`r`n" $fti = (Get-Item C:\___skript\komplett.csv) $prec = $prec + "Liste wurde zuletzt aktualisiert am "+ $fti.LastWriteTime.ToString('dd.MM.yyyy') + " um " + $fti.LastWriteTime.ToString('HH:mm') $prec = $prec + "<br><br>`r`n" |
und das Einfügen der Variable in die Ausgabe mit „PreContent“
1 |
Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac -body "<H1>Druckerübersicht</H1>" -PreContent $prec| Out-File C:\___skript\html\komplett.html |
Sehr schön…
Fehlt noch die Suchfunktion.
Dazu kopiere ich die Funktion „tablefilter.js“ in den Ordner der HTML-Datei (man kann auch einen anderen wählen, aber es soll ja einfach bleiben).
Jetzt muss nur noch die Funktion geladen werden. Dazu erweitere ich die Header-Variable um folgende Zeilen:
1 2 |
$heac = $heac + '<script language="javascript" type="text/javascript" src="tablefilter.js" >'+"`r`n" $heac = $heac + '</script>'+"`r`n" |
Um das Skript dann anzustoßen muss der Aufruf dazu nach der Tabelle eingefügt werden. Nach der Tabelle heißt „PostContent“.
Ich erzeuge eine neue Variable „$posc“ mit dem nötigen Inhalt
1 2 3 |
$posc = '<script language="javascript" type="text/javascript" >'+"`r`n" $posc = $posc + ' setFilterGrid("table1");'+"`r`n" $posc = $posc + '</script>' |
Der ConvertTo-Befehl lautet demnach:
1 |
Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac -body "<H1>Druckerübersicht</H1>" -PreContent $prec -PostContent $posc | Out-File C:\___skript\html\komplett.html |
Allerdings funktioniert es jetzt noch nicht, dann der Tabelle fehlt der zusatz „id=table1“
Bedeutet: Suchen und Ersetzen
1 |
(Get-Content C:\___skript\html\komplett.html) -replace '<table>', '<table id=table1>' | set-content C:\___skript\html\komplett.html |
Funktioniert; und ich bin fast fertig.
Fehlt noch die Annehmlichkeit, die IP-Adressen der Drucker als Link einzubinden.
Hierfür einen herzlichen Dank an „highload“ von „Administrator.de“, der mir hierfür die Lösung präsentierte.
Ich ändere den „replace“-Befehl entsprechend ab:
1 |
(Get-Content C:\___skript\html\komplett.html) -replace '<table>', '<table id=table1>' -replace '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))','<a href="http://$1" target="_blank">$1</a>' | set-content C:\___skript\html\komplett.html |
Jetzt aber: fertig.
Wenn man beide Dateien, die HTML-Datei und tablefilter.js, lokal kopiert, kann die Übersichtssliste mit allen Funktionen auch Offline verwendet werden.
Hier das komplette Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Get-ChildItem -path c:\___skript -Filter *.csv | Remove-Item #-Whatif Get-ChildItem -path c:\___skript\html -Filter *.html | Remove-Item #-Whatif $prec = "Anzahl Drucker pro Server.<br>`r`n" $prec = $prec + "| " $Servername = @("Printer01","Printer02","Printer03") For ($i=0; $i -lt $Servername.Length; $i++) { $Server=$Servername[$i] $File=$Servername[$i]+".csv" Get-WmiObject -class Win32_Printer -Computer "$Server.firma.lan" | select Name, PortName, Sharename, Location, Systemname |Export-Csv C:\___skript\"$File" (Get-content $File | Select-Object -Skip 2) | Set-Content $File (Get-content $File | Select-String -pattern "\s.*XPS\s.*|\s.*PDF\s.*|FinePrint" -notmatch) | Set-Content $File Get-content $File |add-content C:\___skript\komplett.csv $measure = ((Get-Content $File) |Measure-Object) $lines = $measure.Count $prec = $prec + $Server.ToUpper() + " = " + $lines + " | " Remove-item $File } $prec = $prec + "<br>`r`n" $fti = (Get-Item C:\___skript\komplett.csv) $prec = $prec + "Liste wurde zuletzt aktualisiert am "+ $fti.LastWriteTime.ToString('dd.MM.yyyy') + " um " + $fti.LastWriteTime.ToString('HH:mm') $prec = $prec + "<br><br>`r`n" $heac = "<style>`r`n" $heac = $heac + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}`r`n" $heac = $heac + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:lightgrey}`r`n" $heac = $heac + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black; padding: 3px;}`r`n" $heac = $heac + "</style>`r`n" $heac = $heac + '<script language="javascript" type="text/javascript" src="tablefilter.js" >'+"`r`n" $heac = $heac + '</script>'+"`r`n" $posc = '<script language="javascript" type="text/javascript" >'+"`r`n" $posc = $posc + ' setFilterGrid("table1");'+"`r`n" $posc = $posc + '</script>' Get-Content C:\___skript\komplett.csv |ConvertFrom-Csv -header "Druckername","Druckerport","Freigabename","Ort","Servername" |ConvertTo-Html -head $heac -body "<H1>Druckerübersicht</H1>" -PreContent $prec -PostContent $posc | Out-File C:\___skript\html\komplett.html (Get-Content C:\___skript\html\komplett.html) -replace '<table>', '<table id=table1>' -replace '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))','<a href="http://$1" target="_blank">$1</a>' | set-content C:\___skript\html\komplett.html |
Ich hoffe, dass diese Beiträge dem Einen oder Anderen hilfreich sein können.
Hi,
Vielen Dank für die ausführliche Erklärung deines Skriptes? Ich habe in der Vergangenheit angefangen etwas ähnliches firmenintern zu basteln – allerdings direkt per blat als formatierte HTML – Statusmail.
Wäre es möglich einen Screenshot (geschwärzt natürlich) der fertigen Tabelle zubekommen um einen Eindruck zu bekommen wie das ganze fertig aussieht?
VG Alex
Hallo,
schön geschriebene Artikel. Nette Ideen und interessant umgesetzt. Danke für das Lesevergnügen.