BrTzL 10 Geschrieben 19. Oktober 2017 Melden Teilen Geschrieben 19. Oktober 2017 Guten Tag zusammen, ich übe mich gerade im Umgang mit der PowerShell. Wie ich nun bemerke ein sehr mächtiges Tool welches ich bisher (zu meiner Schande) ignoriert habe. Als Sysadmin betreue ich über 300 Arbeitsplätze. Um mich mit PowerShell vertraut zu machen möchte ich über PS eine Inventarisierung der angeschlossenen Drucker durchführen. Mit Hilfe dieser Seite https://krausens-online.de/druckserver-netzwerkdrucker-mit-powershell-auflisten-excelliste/ (und noch vielen anderen) habe ich mir ein Skript gebastelt: cls # Collect port names and host addresses into hash table $hostAddresses = @{} $File=$env:COMPUTERNAME+".csv" Get-WmiObject Win32_TCPIPPrinterPort | ForEach-Object { $hostAddresses.Add($_.Name, $_.HostAddress) } # Ausgabe Druckername, IP-Adresse, Computername Get-WmiObject Win32_Printer | ForEach-Object { New-Object PSObject -Property @{ "Drucker-Name" = $_.Name "IP-Adresse" = $hostAddresses[$_.PortName] "Computer" = $env:COMPUTERNAME } # Ergebnis in CSV schreiben. } |Export-Csv \\Pfad\"$File" # Überflüssige Zeilen und Drucker filtern und in gesammelter CSV speichern Get-content \\Pfad\$File | Select-String -pattern "FreePDF|An OneNote|Fax|Microsoft XPS|#TYPE System.Management.Automation.PSCustomObject|Drucker-Name" -notmatch |add-content \\Pfad\CSV_Drucker.csv Ich möchte also nur Druckernamen, eventuelle IP des Druckers und den Computernamen erfassen und in eine CSV schreiben. Diese CSV wird anschließend noch mal angefasst, Einträge gefiltert und die Ergebnisse anschließend in eine gesammelte Übersichts-CSV geschrieben. Das funktioniert auch. Nun zum Knackpunkt: Führe ich das Skript am PC1 aus werden die Ergebnisse in der Reihenfolge Drucker --> Computername --> IP gespeichert. Bei PC2 speichert das Skript die Reihenfolge in IP --> Drucker --> Computername In meiner Übersichts-CSV habe ich dann alles durcheinander und habe dadurch keine vernünftige Übersicht. Meine zentrale Frage lautet daher: Was muss ich im Skript ändern, damit die Ergebnisse immer in der gleichen Reihenfolge gespeichert werden? Bonuspunkte: Ich habe vor das Skript einmalig auf jedem Rechner laufen zu lassen, da sonst die Ergebnisse immer wieder neu eingetragen werden. Oder gibt es eine elegante Möglichkeit, dass dieses Skript als Startskript laufen kann und nur Änderungen eingetragen werden? Über Anregungen und Kritik würde ich mich sehr freuen. Auch wenn vielleicht noch Verbesserungen am eigentlichen Skript vorgenommen werden können. Wie gesagt: Bin noch blutiger Anfänger :-) Mit freundlichem Gruß BrTzL Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 19. Oktober 2017 Melden Teilen Geschrieben 19. Oktober 2017 (bearbeitet) Wenn Du schon mit CSV-Dateien arbeitest, solltest Du auch die cmdlets benutzen, die dafür gemacht sind. Das macht Dir das Leben leichter. Um mit den Daten einer CSV-Datei weiterzuarbeiten oder erneut zu arbeiten, ist es viel besser Import-CSV zu benutzen anstatt Get-Content. Dann arbeitest Du nicht mit "flachem" Text, sondern mit Arrays und Properties und brauchst es auch nachher nicht wieder aufwändig sortieren. Ich würde dann auch eher versuchen, die überflüssigen Daten soweit "vorne" wie möglich rauszufiltern … vielelicht so hier irgendwie: $PrinterListFileName = $env:COMPUTERNAME + ".csv" $hostAddresses = @{} Get-CimInstance -ClassName Win32_TCPIPPrinterPort | ForEach-Object { $hostAddresses.Add($_.Name, $_.HostAddress) } $PrinterList = Get-CimInstance -ClassName Win32_Printer | Where-Object {$_.Name -notmatch 'FreePDF|An OneNote|Fax|Microsoft XPS|#TYPE System.Management.Automation.PSCustomObject|Drucker-Name'} | ForEach-Object { [PSCustomObject]@{ 'Drucker-Name' = $_.Name 'IP-Adresse' = $hostAddresses[$_.PortName] 'Computer' = $env:COMPUTERNAME } } $PrinterList $PrinterList | Export-Csv -Path $PrinterListFileName -Encoding UTF8 -Delimiter ';' -NoTypeInformation bearbeitet 19. Oktober 2017 von BOfH_666 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.