• 締切済み

VBSでレジストリーの削除方法

VBScriptにより、サーバー上で単にレジストリーのキーごとすべて削除したいのですが、 キーがない場合そこでエラーになり終了してしまいます。 キーの有無にかかわらず、キーがある場合のみ削除するにはどのような スクリプトにしたらよいかアドバイスをください。 スクリプトはこんな感じです。 -------------------------------------------------------------------- Dim WshShell dim bKey Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.RegDelete "HKLM\Software\Tivoli\" WshShell.RegDelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\lcf\" WshShell.RegDelete "HKLM\System\ControlSet001\Enum\Root\Legacy_lcfd\" WshShell.RegDelete "HKLM\System\ControlSet001\Enum\Root\Legacy_TECWINADAPTER*\" WshShell.RegDelete "HKLM\System\ControlSet001\Services\lcfd\" WshShell.RegDelete "HKLM\System\ControlSet001\Services\lcfd\TECWINADAPTER*\" WScript.quit ----------------------------------------------------------------- UNIX Shell はわかるのですが、Windowsに関してはさっぱりわかりません(Object志向のものは苦手なもので・・・)。 もしこれらをUNIX Shell(b,c,k,Shell)でスクリプトを作成する場合、 ひとつひとつif文でファイルの有無を判定し、その結果を標準出力へ出し、その結果、「真」であれば(ファイルがある場合)そのキーを削除する・・・そして、スクリプトの結果を実行ユーザーのホームディレクトリー直下にファイルにして保存・・・というようにするのが一般的ですが、Windowsではどのように記述すればよいかご回答いただければ幸いです。 みなさんもお忙しいと思いますがよろしくお願いします。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アイディア ・ちょっとした方法としては、最初に適当な『値』をキーに登録します。  このときにキーが無ければ『キー』が作成されますよね。  その状態ならばキーを削除してもエラーがでないと思います。  この方法。どうでしょうか? ・なお登録する『値』は名前が絶対に衝突しないものにします。  不安ならばレジストリから登録する『値』の名前を検索して見つからなかったら  登録するようにします。見つかったら別の適当な名前を登録するようにして下さい。  これでエラーを回避できると思います。多分。 ・以上。

paddy0331
質問者

お礼

ありがとうございます! すべて、"RegWrite"で追加すれば全てのキーが存在することに なりますね! 明日ためしてみます!

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

かなり乱暴な方法ですが、とにかく削除するだけでしたらWshShell.RegDeleteの前に、 On Error Resume Next を入れてみてはどうでしょうか。 VBSでなくJSでしたらスマートなtry catchが使えます。

paddy0331
質問者

お礼

ありがとうございます! ”On Error Resume Next”は使えそうです! あとは、エラー処理でどうやって失敗したキーをファイルに吐かせるかが ポイントになりそうですが・・・ あっ、キーの書き込み権限がない。。。どうしよう。。。 WSHでは不可能ですかね~・・・

回答No.1

これが使えるのかなあ・・・自信が無い http://security.okwave.jp/qa2469915.html

paddy0331
質問者

お礼

早速ご回答ありがとうございます! "If IsNull"でキーの有無をファイルに出力できそうですね! それができたら"for"文で"WshShell.RegDelete~"をまわせばよいですかね~!? Shellだったら簡単なのですが・・・

関連するQ&A