WMI 任务:打印机和打印

打印机和打印的 WMI 任务管理和获取有关打印机的数据,例如查找或设置默认打印机。 有关其他示例,请通过 https://www.microsoft.com/technet 访问 TechNet ScriptCenter。

本主题中所示的脚本示例仅从本地计算机获取数据。 有关如何使用脚本从远程计算机获取数据的详细信息,请参阅连接到远程计算机上的 WMI

以下过程介绍了如何运行脚本。

运行脚本

  1. 复制代码并将其保存在扩展名为 .vbs 的文件中,例如 filename.vbs。 确保文本编辑器不会向该文件添加 .txt 扩展名。
  2. 打开命令提示符窗口并导航到保存该文件的目录。
  3. 在命令提示符下键入 cscript filename.vbs。
  4. 如果无法访问事件日志,请进行检查以查看是否正从提升的命令提示符运行。 某些事件日志(例如安全事件日志)可能受用户访问控制 (UAC) 的保护。

注意

默认情况下,cscript 会在命令提示符窗口中显示脚本的输出。 由于 WMI 脚本可以生成大量输出,因此可能需要将输出重定向到文件。 在命令提示符下键入 cscript filename.vbs > outfile.txt 以将 filename.vbs 脚本的输出重定向到 outfile.txt。

下表列出了可用于从本地计算机获取各种类型的数据的脚本示例。

如何实现... WMI 类或方法
...向远程计算机添加新的打印机连接? 使用 Win32_Printer 类和 AddPrinterConnection 方法。
VB
strComputer = "atl-ws-01"
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2")
Set objPrinter = objWMIService.Get("Win32_Printer")
errReturn = objPrinter.AddPrinterConnection ("\\PrintServer1\ArtDepartmentPrinter")
...设置默认打印机?

使用 Win32_Printer 类和 SetDefaultPrinter 方法。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery ("Select * from Win32_Printer Where Name = 'ScriptedPrinter'")
For Each objPrinter in colInstalledPrinters
    objPrinter.SetDefaultPrinter()
Next
PowerShell
$printerName = "\\ServerName\ShareName"
$printer = get-wmiObject -class win32_printer -Namespace $namespace | Where-Object { $_.Name -eq $printerName }
[void]$printer.setDefaultPrinter()
...使用 WMI 取消打印作业?

使用 Win32_Printer 类和 CancelAllJobs 方法。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrintJobs =  objWMIService.ExecQuery ("Select * from Win32_Printer")
For Each objPrintJob in colPrintJobs 
    objPrintJob.CancelAllJobs
Next
PowerShell
$result = (get-wmiObject -class win32_printer -Namespace "root\cimv2").CancelAllJobs()
...确定计算机的默认打印机?

使用 Win32_Printer 类,并检查 Default 属性是否为 True。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery ("Select * from Win32_Printer Where Default = True")
For Each objPrinter in colInstalledPrinters
    Wscript.Echo objPrinter.Name
Next
PowerShell
get-wmiObject -class win32_printer -Namespace "root\cimv2" | where-object { $_.Default -eq 'True' }

脚本和应用程序的 WMI 任务

WMI C++ 应用程序示例

TechNet ScriptCenter