0

我有一个 vbscript 的情况,它让我心烦意乱。我正在编写一个为用户提取默认打印机名称的 vbscript。我需要这个的原因是我稍后要删除所有打印机,然后使用不同的驱动程序将它们放回原处(该代码正在运行),并且我想将用户的默认打印机放回原来的打印机。

现在下面是我的代码,我遇到的问题是,如果我对 NetID 进行硬编码,一切正常,但如果我如下动态执行,则会出现错误。并非所有机器都具有相同的 netID,所以这就是我需要动态执行它的原因。我只是不明白为什么我的代码会出错。错误消息是“注册表项中的根无效”。

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") 
Test = "HKEY_CURRENT_USER\Printers\Defaults\" & Key & "\"
WScript.echo WshShell.RegRead(Test)

例子:

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") ' Returns 12345
Test = "HKEY_CURRENT_USER\Printers\Defaults\" & Key & "\"
WScript.echo WshShell.RegRead(Test) ' Error message

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") ' Returns 12345
Test = "HKEY_CURRENT_USER\Printers\Defaults\12345\"
WScript.echo WshShell.RegRead(Test) 'Returns Default printer value of Lexmark T642

这是我想不通的。键在那里,并有一个名为 (Default) 的值设置为默认打印机的名称。我可以对脚本进行硬编码以获得我需要的东西,但并非每台机器都具有相同的 NetID。我不知道为什么它是硬编码但不是动态的?

4

1 回答 1

0

当您尝试读取的密钥不存在时,会出现该错误消息。例如,在我的机器上运行这段代码

Set WshShell = WScript.CreateObject("WScript.Shell")
Key = WshShell.RegRead("HKCU\Printers\DeviceOld")
WScript.Echo Key   ' -> "Foxit PDF Printer"

Test = "HKCU\Printers\" & Key & "\"

' ADD this line for debuging
WScript.Echo Test  ' -> "HKCU\Printers\Foxit PDF Printer\"

' but that key not exist, so...
Key = WshShell.RegRead(Test)  ' -> ...of couse error
于 2013-01-31T01:42:55.103 回答