【问题标题】:PowerShell Script to Change Printer Drivers on Several Printers用于更改多台打印机上的打印机驱动程序的 PowerShell 脚本
【发布时间】:2017-07-22 16:21:52
【问题描述】:

我正在尝试制作一个 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
        }
}

【问题讨论】:

  • $pattern = 'ZEB*'
  • 谢谢!这确实有效:)
  • 现在我需要将第二个“if”添加到它检查特定打印驱动程序的位置。因此,如果名称中包含 ZEB,驱动程序中包含 HP LASERJET 4,则将驱动程序更改为新的。

标签: shell powershell powershell-3.0 drivers printers


【解决方案1】:

这相当简单,因为您已经从评论响应中完成了一半的工作。我将在定义循环时过滤您要修改的打印机,因此您只需将所需的打印机放入循环中,其余的将完全跳过。最主要的是Where 语句,它与If 语句类似,可以过滤掉正确的打印机。内容如下:

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

因此,它会检查名称是否以字母 ZEB 开头,并检查驱动程序名称中是否包含“HP LSERJET 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
}

【讨论】:

  • 非常感谢!我可以对我想要替换的更具体类型的驱动程序进行匹配,而不是在 DriverName 上使用 -match 吗?
  • @user2387281 -match 会起作用,但我怀疑你需要它。如果您知道确切的驱动程序,只需将*-like 中取出。 -like => 通配符; -match => 正则表达式。因此,如果您需要多个驱动程序,您可以将 -match| 运算符一起使用,而不是创建多个 -or 语句。
  • 酷,感谢您的信息!我最终使用了 -eq 语法,所以它是完全匹配的。我试过 -match,但它会改变所有带有 HP LaserJet 4 的打印机
猜你喜欢
  • 1970-01-01
  • 2021-12-07
  • 2020-03-05
  • 2017-03-23
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多