Jump to content

Ergebnisse sortiert in eine CSV-Datei übergeben


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...