为什么WMI会为同一台计算机返回不同的结果?

时间:2010-11-04 23:35:58

标签: wmi wmi-query

当我发现脚本中的错误实际上是因为WMI返回冲突甚至错误的信息时,我正在对一些用于查询远程计算机的默认打印机的vbscript进行故障排除。请看这个截图: alt text

两者都是针对同一台计算机(CLIFGRIFFIN-PC)。左侧是从Windows Server 2003安装运行的。正确的是在PC上运行。

左边的一个,除了结果较少外,还显示没有打印机是默认的。导致脚本错误导致我调查此问题的原因是什么。

有什么想法吗?这很奇怪。

修改 这是我正在使用的代码...

Set WshShell = CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections

Dim strComputer 
strComputer = WshShell.ExpandEnvironmentStrings("%CLIENTNAME%")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery ("Select * from Win32_Printer Where Default = True")

For Each Printer in colInstalledPrinters
    For i = 0 to OPrinters.Count - 1 Step 2
        If InStr(objPrinters.Item(i+1), Printer.Name) > 0 Then
            WshNetwork.SetDefaultPrinter(objPrinters.Item(i+1))
            Exit For
        End If
    Next
Next 

2 个答案:

答案 0 :(得分:0)

这可能取决于所说的用户。

当您从远程PC查询时,您将只获得本地安装的打印机。 当您从同一台PC查询时,您也将获得所有网络连接的打印机。 此处连接的网络意味着它们在其他PC上共享。

添加网络打印机时会有一些混乱但在Windows中称为本地打印机,但它有一个IP端口。

答案 1 :(得分:0)

尝试将模拟级别设置为模拟,即

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")