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:
$prec = "Anzahl Drucker pro Server.
`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.witron.wiroot.local" | 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:
$prec = $prec + "
`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 + "
`r`n"
und das Einfügen der Variable in die Ausgabe mit „PreContent“
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:
$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
$posc = '<script language="javascript" type="text/javascript" >'+"`r`n"
$posc = $posc + ' setFilterGrid("table1");'+"`r`n"
$posc = $posc + '</script>'
Der ConvertTo-Befehl lautet demnach:
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
(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:
(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:
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 = @("ps12ps01","ps2k8ps01","ps2k8ps02")
For ($i=0; $i -lt $Servername.Length; $i++) {
$Server=$Servername[$i]
$File=$Servername[$i]+".csv"
Get-WmiObject -class Win32_Printer -Computer "$Server.witron.wiroot.local" | 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.