【问题标题】:Why is WMI returning different results for the same computer?为什么 WMI 会为同一台计算机返回不同的结果?
【发布时间】:2010-11-04 23:35:57
【问题描述】:

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

两者都针对同一台计算机 (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 

【问题讨论】:

  • 我相信结果取决于执行脚本的用户帐户。不同的帐户可以有不同的默认打印机,并且某些打印机可能不会为所有帐户安装。
  • 账户是一样的。不过这是个好主意……将来要记住的东西。还有其他想法吗? :)

标签: wmi wmi-query


【解决方案1】:

如前所述,这可能取决于登录用户。

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

添加网络打印机时有点混乱,但它在 windows 中被称为本地但它有一个 ip 端口。

【讨论】:

  • 打印机的数量并不像默认的那样让我感到不安。这就是导致我的 WMI 查询爆炸的原因。
【解决方案2】:

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

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

【讨论】:

  • 我已经用我尝试使用的代码更新了我的帖子,但由于这个原因而失败。我实际上正在使用模拟......可能应该给你所有的信息。对不起:)
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2012-07-28
  • 2013-03-10
  • 1970-01-01
  • 2017-04-01
  • 2023-04-04
  • 2011-01-21
  • 1970-01-01
相关资源
最近更新 更多