Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CSV-Datei in Powershell einlesen und mit foreach weiterverarbeiten

Frage Entwicklung Batch & Shell

Mitglied: Pago159

Pago159 (Level 2) - Jetzt verbinden

12.12.2014, aktualisiert 12:09 Uhr, 1163 Aufrufe, 5 Kommentare

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:

01.
 $ImportPrinter = { 
02.
 
03.
  $printers = Import-Csv "C:\Logs\AddPrinter\import.txt"  –Delimiter ';'  
04.
 
05.
foreach ($printer++ in $printers){ 
06.
$printer  
07.
 
08.
$drivername = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "drivername"} 
09.
$RAWportname = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "portname"} 
10.
$sharename = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "sharename"} 
11.
$location = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "location"} 
12.
$comment = import-csv "C:\Logs\AddPrinter\import.txt" | Where-Object {$_.department -eq "comment"} 
13.
 
14.
 
15.
   Try{ 
16.
        $printserver = $comboPrintServer.Text 
17.
        $portname = "IP_$($RAWportname)" 
18.
     
19.
        # create printer port 
20.
        $wmi = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort") 
21.
        $wmi.psbase.scope.options.enablePrivileges = $true 
22.
        $port = $wmi.CreateInstance() 
23.
        $port.Name = $portname 
24.
        $port.Protocol = 1   
25.
        $port.HostAddress = $RAWportname 
26.
        $port.SNMPEnabled = $False 
27.
        $port.put() 
28.
 
29.
        #create printer instance 
30.
        $print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()  
31.
        $print.Drivername = $printer.drivername 
32.
        $print.PortName = $portname 
33.
        $print.Shared = $true 
34.
        $print.Published = $true 
35.
        $print.Sharename = $sharename 
36.
        $print.Location = $location 
37.
        $print.Comment = $comment 
38.
        $print.DeviceID = $sharename 
39.
        $print.put() 
40.
        return $true 
41.
     }catch{ 
42.
        return $_.Exception.Message 
43.
44.
45.
  }
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:

01.
$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.
Mitglied: colinardo
LÖSUNG 12.12.2014, aktualisiert um 12:14 Uhr
Moin,
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
01.
 $ImportPrinter = { 
02.
    $printers = Import-Csv "C:\Logs\AddPrinter\import.txt" –Delimiter ';'  
03.
 
04.
    foreach ($printer in $printers){ 
05.
 
06.
        $drivername = $printer.drivername 
07.
        $RAWportname = $printer.portname 
08.
        $sharename = $printer.sharename 
09.
        $location = $printer.location 
10.
        $comment = $printer.comment 
11.
 
12.
        Try{ 
13.
            $printserver = $comboPrintServer.Text 
14.
            $portname = "IP_$($RAWportname)" 
15.
     
16.
            # create printer port 
17.
            $wmi = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort") 
18.
            $wmi.psbase.scope.options.enablePrivileges = $true 
19.
            $port = $wmi.CreateInstance() 
20.
            $port.Name = $portname 
21.
            $port.Protocol = 1   
22.
            $port.HostAddress = $RAWportname 
23.
            $port.SNMPEnabled = $False 
24.
            $port.put() 
25.
 
26.
            #create printer instance 
27.
            $print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()  
28.
            $print.Drivername = $drivername 
29.
            $print.PortName = $portname 
30.
            $print.Shared = $true 
31.
            $print.Published = $true 
32.
            $print.Sharename = $sharename 
33.
            $print.Location = $location 
34.
            $print.Comment = $comment 
35.
            $print.DeviceID = $sharename 
36.
            $print.put() 
37.
         }catch{ 
38.
            write-host $_.Exception.Message 
39.
40.
41.
}
Grüße Uwe
Bitte warten ..
Mitglied: Pago159
12.12.2014 um 12:09 Uhr
Hallo Uwe,

schon mal wieder vielen dank hierfür.

Die $printers Variable zeigt mir nun meine 9 Testdrucker an, die Variablen werden auch für die Erstellung des Druckers gefüllt,
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?

Danke Pago
Bitte warten ..
Mitglied: colinardo
12.12.2014, aktualisiert um 12:16 Uhr
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 Zeile
return $true
rausnehmen .. die beendet ja den Scriptblock nach dem ersten Drucker
Bitte warten ..
Mitglied: Pago159
12.12.2014 um 12:42 Uhr
Super, vielen dank, für die schnelle Hilfe von dir.
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.
Bitte warten ..
Mitglied: colinardo
12.12.2014, aktualisiert um 12:51 Uhr
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 41
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Microsoft Office
gelöst CSV-Datei mit einem VBA Makro in Excel einlesen und leicht anpassen (5)

Frage von JoSiBa zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...