PowerShell脚本在多台打印机上更改打印机驱动程序

时间:2017-03-02 19:10:35

标签: shell powershell powershell-v3.0 drivers printers

我试图制作一个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
        }
}

1 个答案:

答案 0 :(得分:1)

这很简单,因为你已经从评论回复中完成了一半的工作。我将在定义循环时过滤您想要修改的打印机,因此您只需要通过循环放置所需的打印机,其余部分将完全跳过。主要的是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
}