ヒイラギの地獄を悩ませている 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 を持っているわけではありません。ハードコーディングされているのに動的ではない理由がわかりませんか?