rundll32 printui PrintUIEntry的错误处理

时间:2013-09-04 19:43:42

标签: vbscript

我正在编写一个脚本,将网络打印机设置为分配给计算机的全局打印机,这样当新用户登录时,他们就不必手动添加打印机了。我正在使用命令rundll32 printui PrintUIEntry。因此,我们将让技术人员转向每台计算机(作为计算机上的管理员),他们将运行此脚本。弹出框将出现,他们将输入打印机名称,确定它运行rundll32命令。我们有2台打印机服务器“vps01”和“vps02”,因此该命令将运行两次以查找打印机。我遇到错误处理问题。我不知道从哪里开始。我尝试设置错误处理,但我知道这是错误的。我有这个命令的方式运行,但如果我输入一个无效的打印机名称,它仍然说添加了打印机。非常感谢任何帮助。

    Dim objNet, strPrinter
    Set objNet = CreateObject("Wscript.Network")
    strPrinter = InputBox("Please enter the name of the Printer you'd like to add", "Add Printer", "eg. printer name")
    Set objShell = CreateObject("WScript.Shell")
    arrServers = Array("vps01","vps02")
    For Each strServer In arrServers
        strCommand = "cmd /c rundll32 printui.dll,PrintUIEntry /ga /n\\" & strServer & "\" & strPrinter
        objShell.Run strCommand, 1, True
    next
    If err.number = 0 Then
    Wscript.Echo strPrinter & " added!"
    Else
    Wscript.Echo "Uh oh - there seems to be a problem! Error Code : " & err.number & " Error Description: " & err.description
    End If

1 个答案:

答案 0 :(得分:1)

Err.Number只会向您显示代码或COM组件中的错误,但看起来您正在尝试运行命令然后读取输出。

我认为你可以采取几种方法:

  1. 如果您存储来自objShell.Run的返回值(类似于result = objShell.Run(strCommand, 1, True),那么您可以看到该命令是否返回成功。我不确定您是否会总是得到一个成功,因为您运行的命令是cmd,并且它可能会成功运行您告诉它的命令。您可以直接运行rundll32而不是通过{{1}运行它}。 UPDATE :这对你没用。虽然cmd会传递来自rundll32的返回码,但它总是0,因为rundll32函数总是返回void。
  2. 您可以使用允许您访问输出流的.Exec,而不是使用cmd方法。您可以解析它以查找您正在寻找的成功和失败消息。
  3. 使用WMI或其他对象模型添加打印机,而不是调用命令行来运行命令。 (也许一个调用AddWindowsPrinterConnection的登录脚本可以满足您的需求,而不是系统网络打印机连接?)这可能比它的价值更麻烦,特别是如果你还不熟悉WMI的快速安装脚本,但它可能是更正确的做事方式,它可以让你更直接地处理任何错误,可能是通过使用你想要做的Err.Number技术。