2010-11-04 43 views
0

当我发现脚本中的错误实际上是因为WMI返回冲突或甚至错误的信息时,我正在解决一些用于查询远程计算机默认打印机的vbscript。请参阅此屏幕截图: alt text为什么WMI为同一台计算机返回不同的结果?

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

左边的一个,除了结果较少外,还显示NONE的打印机是默认的。哪些是导致我调查此问题的脚本错误。

任何想法?这只是奇怪的。

编辑: 这里是我使用的代码...

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 
+1

我相信结果取决于用户帐户的脚本由执行。不同的帐户可以有不同的默认打印机,并且有些打印机可能不会安装所有的打印机。 – 2010-11-05 15:52:42

+0

账户是一样的。这是一个好主意,但是......要记住未来。任何其他想法? :) – clifgriffin 2010-11-05 18:16:42

回答

0

这可能取决于作为据说在用户loged。

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

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

+0

打印机的数量并不像我默认的那样令人不安。这是导致我的WMI查询弹出的那个。 – clifgriffin 2010-11-15 13:49:09

0

尝试设置模拟级别来冒充即

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

我已经更新了我的帖子,我尝试使用的代码因为这个而失败。我实际上使用模拟...可能应该给你所有的信息。对不起:) – clifgriffin 2010-11-15 13:48:40

相关问题