用于更改多台打印机上的打印机驱动程序的 PowerShell 脚本

问题描述 投票:0回答:2

我正在尝试制作一个 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
        }
}
shell powershell powershell-3.0 drivers printers
2个回答
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
}

0
投票

在 Windows 2022 上使用 PowerShell 更新了答案 使用打印管理 PS 模块

Get-Printer | where Name -match $pattern | ForEach-Object{
    Set-Printer $_.Name -DriverName $driver -Confirm
}
© www.soinside.com 2019 - 2024. All rights reserved.