2017-03-02 116 views
0

我正在嘗試使PowerShell腳本能夠更改特定打印機組的所有驅動程序。在幾臺打印機上更改打印機驅動程序的PowerShell腳本

我有大約200名稱以字母Z 我也有打印機的少數不以字母Z.

我想要做到的是該開始打印機..任何以字母ZEB開頭的打印機都會將其驅動程序更改爲「HP LaserJet 4000系列PS」

我試過修改下面的腳本來處理我需要的內容,但它只是運行而沒有任何更改。

$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

謝謝!這實際上工作:) – user2387281

+0

現在我需要添加第二個「如果」它檢查特定的打印驅動程序。因此,如果名稱中包含ZEB,並且驅動程序中包含HP LASERJET 4,則將驅動程序更改爲新的。 – user2387281

回答

0

這很簡單,因爲您已經從評論回覆中完成了一半的工作。我將在定義循環時過濾要修改的打印機,因此您只通過循環放置所需的打印機,其餘部分完全跳過。最主要的是Where語句,它像您的If語句一樣工作,以過濾出合適的打印機。它讀起來就像這樣:

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

所以它會檢查該名稱以字母開始ZEB,並檢查該驅動器必須在驅動程序名稱「HP LASERJET 4」的地方。一起看起來像這樣:

$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

非常感謝!而不是像DriverName那樣,我可以爲我想要替換的更具體類型的驅動程序做一個匹配嗎? – user2387281

+0

@ user2387281'-match'可以工作,但我懷疑你需要它。如果你知道確切的驅動程序,只需從''-like''中取出'*'。 ''''''=>通配符; '-match' =>正則表達式。所以如果你想要幾個驅動程序,你可以使用'-match'和'|'運算符,而不是使用多個'-or'語句。 – BenH

+0

很酷,感謝您的信息!我最終使用-eq語法,因此它完全匹配。我試過 - 匹配,但它會使用HP LaserJet 4更換所有打印機 – user2387281