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