我正在尝试制作一个 PowerShell 脚本来更改一组特定打印机的所有驱动程序。
我有大约 200 台名称以字母 Z 开头的打印机。 我还有一些不以字母 Z 开头的打印机。
我想要完成的是......任何以字母 ZEB 开头的打印机的驱动程序都更改为“HP LaserJet 4000 Series 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
}
}
这相当简单,因为您已经完成了评论回复的一半工作。我将在定义循环时过滤您想要修改的打印机,因此您只需将想要的打印机放入循环中,其余的将完全跳过。最重要的是
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
}
在 Windows 2022 上使用 PowerShell 更新了答案 使用打印管理 PS 模块
Get-Printer | where Name -match $pattern | ForEach-Object{
Set-Printer $_.Name -DriverName $driver -Confirm
}