Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1273 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 ..
Ähnliche Inhalte
Windows Server
gelöst PowerShell Inhalt einer csv Datei löschen (4)

Frage von makaroni zum Thema Windows Server ...

Batch & Shell
gelöst Powershell - HL7 - Export nach CSV (1)

Frage von internet2107 zum Thema Batch & Shell ...

Batch & Shell
CSV zu XML Probleme mit PowerShell (7)

Frage von comtel zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Mehrere Domains einlesen (9)

Frage von Agilolfinger zum Thema Batch & Shell ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(6)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

Monitoring
Netzwerk-Monitoring Software (16)

Frage von Ghost108 zum Thema Monitoring ...

Windows 10
Windows 10 Ordnerfreigabe (15)

Frage von Xaero1982 zum Thema Windows 10 ...