0

我正在编写一个脚本,将网络打印机设置为分配给计算机的全局打印机,因此当新用户登录时,他们不必手动添加打印机,它就已经存在了。我正在使用命令 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
4

1 回答 1

1

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

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

  1. 如果您从objShell.Run( 类似的东西存储返回值,result = objShell.Run(strCommand, 1, True)您可以查看命令是否返回成功。我不确定您是否总是会成功,因为您正在运行的命令是cmd,并且很可能在运行你告诉它的命令。你可以rundll32直接运行而不是通过运行它cmd 更新:这对你没有帮助。虽然 cmd 将传递来自 rundll32 的返回码,但它始终为 0,因为 rundll32 函数总是返回无效。
  2. .Run您可以使用.Execwhich 来访问输出流,而不是使用该方法。您可以解析它以获取您正在寻找的成功和失败消息。
  3. 不要调用命令行来运行命令,而是使用 WMI 或其他一些对象模型来添加打印机。(也许一个调用的登录脚本AddWindowsPrinterConnection足以满足您的需要,而不是系统网络打印机连接?)这可能比它的价值更麻烦,特别是如果您还不熟悉 WMI 来快速安装脚本,但它可能更正确的做事方式,它可以让您以更直接的方式处理任何错误,可能是通过使用看起来像您正在尝试做的 Err.Number 技术。
于 2013-09-04T20:15:44.390 回答