2017-03-02 3 views
0

Ich versuche, ein PowerShell-Skript zu erstellen, das alle Treiber für einen bestimmten Druckersatz ändert.PowerShell-Skript zum Ändern von Druckertreibern auf mehreren Druckern

Ich habe etwa 200 Drucker, dessen Namen mit dem Buchstaben Z. beginnt ich auch eine Handvoll von Druckern, die mit dem Buchstaben Z. nicht

Was dies zu erreichen, ich versuche beginnen ist .. Jeder Drucker, der mit den Buchstaben ZEB beginnt, hat seinen Treiber in "HP LaserJet 4000 Series PS" geändert

Ich habe versucht, das Skript unten zu ändern, um mit dem zu arbeiten, was ich brauche, aber es läuft nur und nichts ändert sich.

$driver = "HP LaserJet 4000 Series PS" 
$pattern = 'ZEB' 

$printers = gwmi win32_printer 

foreach($printer in $printers){ 
     $name = $printer.name 
     if($name -like $pattern){ 
       & rundll32 printui.dll PrintUIEntry /Xs /n $name DriverName $driver 
     } 
} 
+0

'$ pattern = 'ZEB *'' – BenH

+0

Danke! Das hat wirklich funktioniert :) – user2387281

+0

Jetzt muss ich ein zweites "if" hinzufügen, wo es nach einem bestimmten Druckertreiber sucht. Also, wenn es ZEB im Namen hat, und HP LASERJET 4 im Treiber, dann ändern Sie den Treiber auf den neuen. – user2387281

Antwort

0

Dies ist ziemlich einfach, wie Sie bereits die Hälfte der Dinge aus der Kommentarantwort getan haben. Ich werde die Drucker filtern, die Sie ändern möchten, während die Schleife definiert ist, also legen Sie nur die Drucker, die Sie wollen, durch die Schleife und der Rest wird komplett übersprungen. Die Hauptsache ist die Where Anweisung, die wie Ihre If Anweisung arbeitet, um nur die richtigen Drucker herauszufiltern. Es liest sich wie folgt:

$Printers | Where{ $_.Name -like $pattern -and $_.DriverName -like '*HP LASERJET 4*' } 

So prüft es, dass der Name mit den Buchstaben beginnt ZEB und prüft, ob die Treiber ‚HP Laserjet 4‘ irgendwo im Fahrernamen. Alles zusammen sieht so aus:

$driver = "HP LaserJet 4000 Series PS" 
$pattern = 'ZEB*' 

$printers = gwmi win32_printer 

foreach($printer in ($printers|Where{$_.Name -like $pattern -and $_.DriverName -like '*HP LASERJET 4*'})){ 
     $name = $printer.name 
     & rundll32 printui.dll PrintUIEntry /Xs /n $name DriverName $driver 
} 
+0

Super danke! Statt -wie auf dem DriverName, kann ich eine Übereinstimmung für eine spezifischere Art des Treibers tun, den ich ersetzen möchte? – user2387281

+0

@ user2387281 'match' würde funktionieren, aber ich bezweifle, dass du es brauchst. Wenn Sie den genauen Treiber kennen, nehmen Sie einfach die '*' 's aus dem' -like'. '-like' => Platzhalter; '-match' => Regex. Wenn Sie also mehrere Treiber benötigen, können Sie 'match' mit dem Operator' | 'verwenden, anstatt mehrere' -or'-Anweisungen zu machen. – BenH

+0

Cool, danke für die Info! Am Ende habe ich die -eq-Syntax verwendet, so dass es genau passierte. Ich habe -match versucht, aber es würde alle Drucker mit HP LaserJet 4 ändern – user2387281

Verwandte Themen