PowerShell 技能连载 - 读取打印机属性(第 3 部分)

在之前的技能中,我们研究了如何使用 Get-PrinterProperty 读取本地安装打印机的打印机属性。此 cmdlet 是所有 Windows 操作系统附带的 PrintManagement 模块的一部分。

重要提示:由于属性名称是特定于打印驱动程序的,如果您需要在整个企业中管理相同类型的打印机,此 cmdlet 会非常有用。如果您想为大量不同的打印机类型创建详细的打印机清单,这不是最佳选择,因为您必须为每个正在使用的打印机驱动程序确定确切的属性名称。同样,在下面的示例中,请确保将打印机属性名称替换为您的打印机支持的名称。

简而言之,要读取特定的打印机属性,您需要提供打印机的名称(运行 Get-Printer 以查找打印机名称)。然后该 cmdlet 会列出所有可用的打印机属性,这些属性可能会因打印机驱动程序和型号而异:

1
2
3
4
5
6
7
8
9
10
11
12
PS> Get-PrinterProperty -PrinterName 'S/W Laser HP'

ComputerName PrinterName PropertyName Type Value
------------ ----------- ------------ ---- -----
S/W Laser HP Config:AccessoryO... String 500Stapler
S/W Laser HP Config:ActualCust... String 431800_914400
S/W Laser HP Config:AutoConfig... String NotInstalled
S/W Laser HP Config:Auto_install String INSTALLED
S/W Laser HP Config:BookletMak... String NOTINSTALLED
S/W Laser HP Config:CombineMed... String Installed
S/W Laser HP Config:DeviceIsMo... String Installed
S/W Laser HP Config:DuplexUnit String Installed

例如,您可以过滤属性名称并获取已安装和已卸载打印机附件的列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PS> Get-PrinterProperty -PrinterName 'S/W Laser HP' | Where-Object Value -like *installed* | Select-Object -Property PropertyName, Value

PropertyName Value
------------ -----
Config:AutoConfiguration NotInstalled
Config:Auto_install INSTALLED
Config:BookletMakerUnit_PC NOTINSTALLED
Config:CombineMediaTypesAndInputBins Installed
Config:DeviceIsMopier Installed
Config:DuplexUnit Installed
Config:EmbeddedJobAccounting NotInstalled
Config:EnvFeed_install NOTINSTALLED
Config:HPJobSeparatorPage NotInstalled
Config:HPPinToPrintOnly NotInstalled
Config:HPPunchUnitType NotInstalled
Config:InsLwH1_install NOTINSTALLED
Config:InsUpH1_install NOTINSTALLED
Config:JobRetention Installed
Config:ManualFeed_install INSTALLED
Config:PCCFoldUnit NOTINSTALLED
Config:PCVFoldUnit NOTINSTALLED
Config:PrinterHardDisk Installed
Config:SecurePrinting Installed
Config:StaplingUnit_PC NOTINSTALLED
Config:Tray10_install NOTINSTALLED
Config:Tray1_install INSTALLED
Config:Tray2_install INSTALLED
Config:Tray3_install INSTALLED
Config:Tray4_install NOTINSTALLED
Config:Tray5_install NOTINSTALLED
Config:Tray6_install NOTINSTALLED
Config:Tray7_install NOTINSTALLED
Config:Tray8_install NOTINSTALLED
Config:Tray9_install NOTINSTALLED
Config:TrayExt1_install NOTINSTALLED
Config:TrayExt2_install NOTINSTALLED
Config:TrayExt3_install NOTINSTALLED
Config:TrayExt4_install NOTINSTALLED
Config:TrayExt5_install NOTINSTALLED
Config:TrayExt6_install NOTINSTALLED

知道打印机名称和特定属性名称后,您可以查询各个属性并检索值以在脚本中使用它。以下是检查是否安装了双面打印单元的示例(确保将打印机名称和属性名称调整为您的打印机型号):

1
2
3
4
5
6
7
PS> Get-PrinterProperty -PrinterName 'S/W Laser HP' -PropertyName Config:DuplexUnit | Select-Object -ExpandProperty Value
Installed

PS> $hasDuplexUnit = (Get-PrinterProperty -PrinterName 'S/W Laser HP' -PropertyName Config:DuplexUnit).Value -eq 'installed'

PS> $hasDuplexUnit
True

要远程查询打印机,Get-PrinterProperty 具有 -ComputerName 参数。它接受单个字符串,因此您一次只能查询一台打印机,并且没有 -Credential 参数,因此您无法以其他人身份进行身份验证。你可以试试这个来查询你自己的机器,一旦成功,用真正的远程系统替换计算机名称:

1
PS> Get-PrinterProperty -PrinterName 'S/W Laser HP' -ComputerName $env:COMPUTERNAME

由于 cmdlet 使用 Windows 远程管理服务进行远程访问,因此目标打印服务器应启用 WinRM 远程处理(这是 Windows 服务器的默认设置),并且您应该是目标端的管理员。

实际情况中,您还希望能够查询多个服务器并以其他人身份进行身份验证。对于远程访问,首先使用 New-CimSession 指定要查询的所有服务器,并根据需要提交凭据。

接下来,将此会话提交给 Get-PrinterProperty。如果您有适当的访问权限,现在可以并行查询会话中的所有服务器,从而节省大量时间。-ThrottleLimit 参数确定最多实际联系多少个会话。如果您指定的服务器数超过最大连接数,PowerShell 将自动将其余服务器排队:

1
2
3
4
5
$session = New-CimSession -ComputerName server1, server2, server3 -Credential mydomain\remotinguser

Get-PrinterProperty -PrinterName 'S/W Laser HP' -CimSession $session -ThrottleLimit 100

Remove-CimSession -CimSession $session

额外提示:您也可以使用 Get-Printer 查找远程打印机名称。Get-Printer 还接受 -CimSession 参数,因此您可以使用相同的网络会话从一台或多台远程服务器查询所有打印机名称。

PowerShell 技能连载 - 读取打印机属性(第 3 部分)

http://blog.vichamp.com/2021/08/09/reading-printer-properties-part-3/

作者

吴波

发布于

2021-08-09

更新于

2022-07-06

许可协议

评论