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

ForEach Schleife für Drucker funktioniert nicht

Frage Entwicklung Batch & Shell

Mitglied: mguenth83

mguenth83 (Level 1) - Jetzt verbinden

25.09.2013, aktualisiert 16:44 Uhr, 1784 Aufrufe, 8 Kommentare

Hi,
ich wollte bei einer Migration die Druckernamen auslesen lassen, diese dann speichern und auf den neuen System wieder verbinden.

Habt Ihr eine Ahnung warum meine ForEachschleife nicht funktioniert ?
Versuche auf der Inhalt der in der Variable drauf zu zugreifen damit er alle vier Drucker anlegt.

01.
$Drucker = Get-WmiObject -Class Win32_Printer | Select-Object -Property ShareName, SystemName | Where-Object -Like -Property SystemName -Value \\CONTOSO-PRINT1 |Select-Object -Property ShareName 
02.
$WindowsVersion = [System.Environment]::OSVersion.Version 
03.
if ($WindowsVersion.Build -ge 7601) { 
04.
$Drucker | ForEach-Object { 
05.
(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("$_.ShareName") 
06.
}}
Das hier steht in der Variablen...
01.
ShareName                                                                                                                    
02.
---------                                                                                                                    
03.
HPLJ_PRO_400M400                                                                                                          
04.
KONICAMINOLTA_1                                                                                                        
05.
KYOCERA_TASKALFA_01                                                                                                    
06.
KYOCERA_TASKALFA_02
Mitglied: colinardo
25.09.2013, aktualisiert um 23:23 Uhr
Hallo Matthias,
Versuchs mal in Zeile 5 hiermit (ungetestet)
01.
(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\CONTOSO-PRINT1\$($_.ShareName)") 
Grüße Uwe
Bitte warten ..
Mitglied: mguenth83
26.09.2013 um 07:44 Uhr
Hi Uwe,
danke für die Bemühungen aber leider hat es nicht funktioniert...schade eigentlich...

Gruß
Matze
Bitte warten ..
Mitglied: colinardo
26.09.2013 um 08:10 Uhr
Wenn du das Script auf dem gleichen Rechner ausführst wo die Verbindungen noch existieren kann das erneute Hinzufügen ja nicht klappen. Speichere die Daten pro Client z.B. in einer Textdatei wie in diesem Beispiel: http://social.technet.microsoft.com/Forums/windowsserver/de-DE/1da4e996 ...

Grüße Uwe
Bitte warten ..
Mitglied: mguenth83
26.09.2013 um 08:32 Uhr
Hey Uwe,
öhm ja deswegen habe ich Zeile Eins auskommentiert und nur eine Textdatei als Input genommen. Somit kann ich noch nicht vorhandene Drucker per Hand in die TXT schreiben die dann eigentlich hätte funktionieren sollen.

Gruß
Matze
Bitte warten ..
Mitglied: colinardo
26.09.2013, aktualisiert um 09:07 Uhr
öhm ja deswegen habe ich Zeile Eins auskommentiert
Stand leider nirgendwo in deinem Thread bzw. Script.
Hiermit hatte ich bei einem Test keine Probleme:
01.
$Drucker = ....... 
02.
$objPrint = [wmiclass] "Win32_Printer" 
03.
$Drucker | %{$objPrint.AddPrinterConnection("\\CONTOSO-PRINT1\$($_.ShareName)")}
Wäre auch nett wenn du zumindest mal die Ausgabe deines Scriptes posten würdest dann hätten wir mehr Ansätze

noch was, das auslesen deiner Drucker mit deiner ersten Zeile ginge auch einfacher:
01.
$Drucker = Get-WmiObject -Class Win32_Printer |?{$_.SystemName -eq "\\CONTOSO-PRINT1" -and $_.ShareName -ne $null} | select -ExpandProperty ShareName
Grüße Uwe
Bitte warten ..
Mitglied: mguenth83
26.09.2013 um 09:18 Uhr
Irgendwie bin ich glaub ich zu blöd für Powershell. Deine Variante von der Ersten Zeile gibt überhaupt nichts aus.

Das andere funktioniert auch nicht wirklich...

01.
Get-WmiObject -Class Win32_Printer|Select-Object -Property ShareName, SystemName|Where-Object -Like -Property SystemName -Value \\CONTOSO-PRINT1|Select-Object -Property ShareName|Format-Table ShareName -HideTableHeaders|Out-File C:\Temp\Printer.txt 
02.
Get-Content "C:\Temp\printer.txt" 
03.
$WindowsVersion = [System.Environment]::OSVersion.Version 
04.
if ($WindowsVersion.Build -ge 7601) { 
05.
    $File2=Get-Content "C:\Temp\printer.txt" 
06.
    $File2.Replace(" ",$null) | Out-File "C:\Temp\printer.txt" 
07.
    $Printer = Get-Content "C:\Temp\printer.txt" 
08.
 
09.
$objPrint = [wmiclass] "Win32_Printer"  
10.
$Printer | ForEach-Object { 
11.
$Printer | %{$objPrint.AddPrinterConnection("\\CONTOSO-PRINT1\$($_.ShareName)")} 
12.
}}
Bringt nur wirre Zeichen als ausgabe....
01.
KONICAMINOLTA_11                                                                                                        
02.
 
03.
 
04.
 
05.
 
06.
__GENUS          : 2 
07.
__CLASS          : __PARAMETERS 
08.
__SUPERCLASS     :  
09.
__DYNASTY        : __PARAMETERS 
10.
__RELPATH        :  
11.
__PROPERTY_COUNT : 1 
12.
__DERIVATION     : {} 
13.
__SERVER         :  
14.
__NAMESPACE      :  
15.
__PATH           :  
16.
ReturnValue      : 1801 
17.
PSComputerName   :  
18.
 
19.
__GENUS          : 2 
20.
__CLASS          : __PARAMETERS 
21.
__SUPERCLASS     :  
22.
__DYNASTY        : __PARAMETERS 
23.
__RELPATH        :  
24.
__PROPERTY_COUNT : 1 
25.
__DERIVATION     : {} 
26.
__SERVER         :  
27.
__NAMESPACE      :  
28.
__PATH           :  
29.
ReturnValue      : 1801 
30.
PSComputerName   : 
Bitte warten ..
Mitglied: colinardo
26.09.2013, aktualisiert um 09:33 Uhr
Das kann so auch nicht gehen .... dein Script ist voller Fehler
machs so ...
01.
Get-WmiObject -Class Win32_Printer |?{$_.SystemName -eq "\\CONTOSO-PRINT1" -and $_.ShareName -ne $null} | select -ExpandProperty ShareName | Out-File C:\Temp\Printer.txt 
02.
$Drucker = Get-Content "C:\Temp\printer.txt" 
03.
$WindowsVersion = [System.Environment]::OSVersion.Version 
04.
if ($WindowsVersion.Build -ge 7601) { 
05.
  $objPrint = [wmiclass] "Win32_Printer"  
06.
  foreach ($d in $Drucker){ 
07.
    $objPrint.AddPrinterConnection("\\CONTOSO-PRINT1\$d")} 
08.
09.
}
Und die Ausgabe ist nicht wirres Zeug sondern sagt zum Beispiel aus das der Fehler 1801 aufgetreten ist und das bedeutet: Invalid Printer Name (http://msdn.microsoft.com/en-us/library/aa384769%28v=vs.85%29.aspx)
Wenn dort ReturnValue = 0 ist wurde die Verbindung erfolgreich hinzugefügt.
Bitte warten ..
Mitglied: mguenth83
26.09.2013 um 12:00 Uhr
Funktioniert perfekt....vielleicht sollte ich mal nen Powershellkurs machen...jedenfalls wieder was dazu gelernt.
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL Anywhere: FOREACH möglich? (4)

Frage von BirdyB zum Thema Datenbanken ...

Batch & Shell
gelöst Warum funktioniert das echo in meiner for-Schleife auch mit Sonderzeichen? (9)

Frage von Pedant zum Thema Batch & Shell ...

Virtualisierung
Drucker aus einer VM heraus funktioniert nicht (5)

Frage von NCCTech zum Thema Virtualisierung ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Eine Netzwerkdose im Wechsel für zwei unterschiedliche Netze (12)

Frage von kartoffelesser zum Thema LAN, WAN, Wireless ...

Netzwerke
Mobile Einwahl IPSec VPN von iPhone iPad T-Mobile zur Pfsense (12)

Frage von Spitzbube zum Thema Netzwerke ...

Voice over IP
SNOM D765 an LancomR883VAW (10)

Frage von MS6800 zum Thema Voice over IP ...

Windows Netzwerk
Ordner-Freigabe außerhalb der Domäne (9)

Frage von Remsboys zum Thema Windows Netzwerk ...