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

それは私が理解できないものです。キーはそこにあり、(デフォルト) という値がデフォルト プリンタの名前として設定されています。スクリプトをハードコーディングして必要なものを取得することはできますが、すべてのマシンが同じ 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 に答える