CSV-Datei in Powershell einlesen und mit foreach weiterverarbeiten
Liebe Kolleginnen und Kollegen,
ich habe das Script, für die Druckereinrichtung um einiges erweitert, zum einem habe ich einen Export in eine CSV-Datei eingebaut, zum anderen eine direkte Bildschirmanzeige aller eingerichteten Drucker auf dem entsprechenden Printserver.
Nun möchte ich allerdings auch noch eine CSV-Datei einlesen können, um schnell mehrere Drucker erstellen zu können.
Hier mein Scriptteil:
Ich bekomme bei der Variablenerstellung leider keine Daten angegeben. Die Variable $Printers ist mit den Druckern gefüllt und die Variable $printer ist mit dem entsprechenden Drucker zum Import und der Erstellung des Ports gefüllt. Sobald ich das ganze weiter aufdröseln möchte, geht dies nicht mehr.
Ich habe auch schon versucht:
auch dies führte zum selben Ergebnis, die Variable blieb leer.
Wo liegt mein Denkfehler?
Vielen dank schon mal für die Hilfe.
ich habe das Script, für die Druckereinrichtung um einiges erweitert, zum einem habe ich einen Export in eine CSV-Datei eingebaut, zum anderen eine direkte Bildschirmanzeige aller eingerichteten Drucker auf dem entsprechenden Printserver.
Nun möchte ich allerdings auch noch eine CSV-Datei einlesen können, um schnell mehrere Drucker erstellen zu können.
Hier mein Scriptteil:
$ImportPrinter = {
$printers = Import-Csv "C:\Logs\AddPrinter\import.txt" –Delimiter ';'
foreach ($printer++ in $printers){
$printer
$drivername = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "drivername"}
$RAWportname = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "portname"}
$sharename = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "sharename"}
$location = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "location"}
$comment = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "comment"}
Try{
$printserver = $comboPrintServer.Text
$portname = "IP_$($RAWportname)"
# create printer port
$wmi = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort")
$wmi.psbase.scope.options.enablePrivileges = $true
$port = $wmi.CreateInstance()
$port.Name = $portname
$port.Protocol = 1
$port.HostAddress = $RAWportname
$port.SNMPEnabled = $False
$port.put()
#create printer instance
$print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()
$print.Drivername = $printer.drivername
$print.PortName = $portname
$print.Shared = $true
$print.Published = $true
$print.Sharename = $sharename
$print.Location = $location
$print.Comment = $comment
$print.DeviceID = $sharename
$print.put()
return $true
}catch{
return $_.Exception.Message
}
}
}
Ich bekomme bei der Variablenerstellung leider keine Daten angegeben. Die Variable $Printers ist mit den Druckern gefüllt und die Variable $printer ist mit dem entsprechenden Drucker zum Import und der Erstellung des Ports gefüllt. Sobald ich das ganze weiter aufdröseln möchte, geht dies nicht mehr.
Ich habe auch schon versucht:
$drivername = $printer.drivername
auch dies führte zum selben Ergebnis, die Variable blieb leer.
Wo liegt mein Denkfehler?
Vielen dank schon mal für die Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 257499
Url: https://administrator.de/forum/csv-datei-in-powershell-einlesen-und-mit-foreach-weiterverarbeiten-257499.html
Ausgedruckt am: 22.12.2024 um 09:12 Uhr
5 Kommentare
Neuester Kommentar
Moin,
Also insgesamt sähe das dann etwa so aus, aber ich kenne den Aufbau deiner CSV-Datei leider nicht
Grüße Uwe
foreach ($printer++ in $printers){
das ++ ist schon mal falsch ... deswegen haben deine Folgeversuche nicht funktioniert.Also insgesamt sähe das dann etwa so aus, aber ich kenne den Aufbau deiner CSV-Datei leider nicht
$ImportPrinter = {
$printers = Import-Csv "C:\Logs\AddPrinter\import.txt" –Delimiter ';'
foreach ($printer in $printers){
$drivername = $printer.drivername
$RAWportname = $printer.portname
$sharename = $printer.sharename
$location = $printer.location
$comment = $printer.comment
Try{
$printserver = $comboPrintServer.Text
$portname = "IP_$($RAWportname)"
# create printer port
$wmi = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort")
$wmi.psbase.scope.options.enablePrivileges = $true
$port = $wmi.CreateInstance()
$port.Name = $portname
$port.Protocol = 1
$port.HostAddress = $RAWportname
$port.SNMPEnabled = $False
$port.put()
#create printer instance
$print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()
$print.Drivername = $drivername
$print.PortName = $portname
$print.Shared = $true
$print.Published = $true
$print.Sharename = $sharename
$print.Location = $location
$print.Comment = $comment
$print.DeviceID = $sharename
$print.put()
}catch{
write-host $_.Exception.Message
}
}
}
Zitat von @Pago159:
nur leider funktioniert die foreach Schleife anscheinend nicht, da nur ein Drucker erstellt wird.
hättest du hier auch eine Lösung für micht?
ja, die Zeilenur leider funktioniert die foreach Schleife anscheinend nicht, da nur ein Drucker erstellt wird.
hättest du hier auch eine Lösung für micht?
return $true
Zitat von @Pago159:
Jetzt stellt sich die Frage, wo übergebe ich nun das $true, damit ich in die richtige Abschlussmeldung gelange?
ohne das return true, erhalte ich nun meine Meldung, dass ein Fehler aufgetreten ist und in meiner Logdatei ist kein Eintrag
enthalten.
für diesen Fall in meinem Script dann zwischen Zeile 40 und 41Jetzt stellt sich die Frage, wo übergebe ich nun das $true, damit ich in die richtige Abschlussmeldung gelange?
ohne das return true, erhalte ich nun meine Meldung, dass ein Fehler aufgetreten ist und in meiner Logdatei ist kein Eintrag
enthalten.