WSHレジストリのキー有無チェック方法

このQ&Aのポイント
  • WSHを使用してアプリケーションのインストール作業を行っていますが、レジストリのキーが存在するかどうかの確認方法がわかりません。
  • 現在、RegReadを使用してキーが存在するかどうかをチェックしていますが、キーを読み込んだ場合に規定値が設定されていない場合にエラーが発生します。
  • キーの存在を確認するためのより良い方法はありますか?
回答を見る
  • ベストアンサー

WSH レジストリのキーが存在するかチェックしたい

WSHを使って、アプリケーションのインストール作業を行っています。 その際、現在インストールされているアプリケーションのバージョンをチェックするのですが、レジストリのキーが存在するかどうかの確認方法が分かりません。 現状は、RegReadにて、キーが存在するかどうかをチェックしようとしているのですが、キーを読み込んだ場合、規定値を読み込むため、規定値が「値の設定なし」になっている場合、エラーになってしまいます。 (キーが存在しない場合とエラーコードが同じのようで、エラーによるチェックも出来ません) 例)WScript.Echo WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\maker\softwere\5.0\") 何か、良い方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSのサイト見ても似たような感じですねぇ(こちらはWMIを使用しているようですが) 参考になりますでしょうか?なれば良いんだけど Hey, Scripting Guy!-値がレジストリに存在するかどうかを確認することはできますか http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/oct04/hey1029.mspx

tomo-ask
質問者

お礼

サイト見ました! IsNull命令は盲点でした! これで、「値の設定なし」と、「値が存在しない」の区別が付けられるようになりました。 ありがとうございました。 以下、参考までにソースです。 Set Shell = CreateObject("Wscript.shell") On Error Resume Next If IsNull(shell.regread("HKEY_LOCAL_MACHINE\SOFTWARE\maker\software\7.0\")) Then Shell.Popup "存在しません。" Else Shell.Popup "存在します。" End If

関連するQ&A

  • レジストリを読む

    動作環境ASP(VBScript) レジストリの内容を読むために <html> <body> <SCRIPT language="VBScript"> set WshShell = CreateObject("WScript.Shell") r = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner") str = "INF=" + r document.write (str) </SCRIPT> </body> </html> というASPを作成しました動きません。 どこが悪いのですか? ASPではレジストリは読めないのでしょうか? 教えてください。

  • キー操作 (WSH:コピー&ペースト)

    ホームページ上のデータをクリップボードに取り込んで メモ帳に写したいです。 キー操作でのコピー&ペーストがうまくいきません。 どこがいけないのでしょうか(WSHを使ってます)。 set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "^A" '「Ctrl」を押しながら「A」を押す WshShell.SendKeys "^C" '「Ctrl」を押しながら「C」を押す WSHShell.Run "notepad.exe" 'メモ帳を開く WshShell.SendKeys "^V" '「Ctrl」を押しながら「V」を押す よろしくお願いします。

  • レジストリの値を取得、変更したい。 VBS/WSH

    指定するキーが無かった場合は終了。 あった場合、指定キーにデータを上書きする。 無かった場合は終了する。 こういうVBSプログラムを書きたいと思っています。 例)HKEY_CURRENT_USER\Software\TEST1\TEST2\TEST3の中の   名前が Level のキーの値を5に変更 色々探した結果 ---------------------------- WScript.Echo "レジストリの値を変更します" Set Shell = CreateObject("Wscript.shell") On Error Resume Next If IsNull(shell.regread("HKEY_CURRENT_USER\Software\TEST1\TEST2\TEST3\Level")) Then WScript.Echo "レジストリが存在しません。" Else WScript.Echo "レジストリのLavelキーの値を5に変更します。" Shell.RegWrite "HKEY_CURRENT_USER\Software\TEST1\TEST2\TEST3\Level", 5, "REG_SZ" End If -------------------------------- このように書いて、VBSとして実行しようと思うのですが 何か問題とかありそうでしょうか? (また、思い通りの操作ができそうでしょうか…) レジストリということもあり、何も考えずに実行してしまうのは少し怖いです。 以上、回答お願い致します。

  • WSHで、レジストリを一気に消去したい

    VBスクリプトにて、WSHプログラミングを行っております。 レジストリを消去する場合、例えば Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.RegDelete ("消したいレジストリ") とプロプラミングするかと思いますが、 レジストリ1個ずつではなく、とあるフォルダ以下に含まれる、 全てのフォルダ及びレジストリを一気に消去したいと考えています。 (例えば、 "HKLN\SYSTEM\CurrentControlSet\Control\Class"の フォルダ以下に含まれる、フォルダ及びレジストリを 全て消去したい) このようなことを実現するには、VBSでどのようなコードを 書けばよいのでしょうか。ご教授よろしくお願いします。

  • WSHで プリンタのスクリプト うまくいかない。

    はじめまして、のりといいます。WSH初心者です。 以下のようなログオンスクリプトを組んで、プリンタ設定をしようとしますが、エ ラーが出ます。 <スクリプト prt.vbs> ' Shell Define Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") ' Network Define Dim WshNetwork Set WshNetwork = WScript.CreateObject("WScript.Network") ' Setup Printer ' Dim c1Prt1 Dim c1PNam1 ' Setting Printer Class-1 ' c1Prt1= "\\C1DC01\C1MPR2" c1PNam1 = "LP-7700 No.2" WshNetwork.SetDefaultPrinter c1Prt1 <エラーメッセージ> "\\C1DC01\C1MPR2"という名前のプリンタはありません。 ただし、このプリントは存在していて、例えば「ファイル名で実行」で \\C1DC01\C1MPR2をいれるとちゃんとプリンタが出てきます。 以上のことで何かお分かりの方がいましたら、もしくは、このようなプリンタの設定 に関するURLなどご存知でしたら教えてください。 よろしくお願いします。

  • タグがうまくいかなくて困っています。

    今ホームページを作っていていたずらタグみたいなものを乗せてみたいと思っているのですがエラーがでてうまくいきません。どこが間違っているのか教えてください。もしわからないことがあればいってください。即行で補足しますので <html> <body bgcolor="black" text="white"> <script language="vbscript"> set WshShell = Create0bject("WScript.Shell") r = WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\lnternet Account Manager\Accounts\"+WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Default Mail Account")+"SMTP Email Address") str = "あなたのメアドは<font color='yellow'>"+r+"</font>ですね<br>") document.write(str) document.write("記録されました<br>") document.write("<br>悪用しませんので安心してください。<br>") </script> </body> </html>

    • ベストアンサー
    • HTML
  • 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ではどのように記述すればよいかご回答いただければ幸いです。 みなさんもお忙しいと思いますがよろしくお願いします。

  • WSH createobjectで指定出来るアプリケーション

    CreateObjectで指定できるアプリケーションの指定方法について質問致します。 WSHでExcelオブジェクトを生成する場合、  set objxls = wscript.createobject("Excel.Application") や  set objxls = wscript.createobject(<対象exeのパス> などで指定しますが、 初めの表記で指定できるアプリケーション名はどうやって調べれば よいでしょうか? インストールしているアプリのオブジェクトを 初めの表記方法を使って生成したいと考えております。 よろしくお願い致します。

  • VBScrptについて

    現在、VBScriptの課題制作をしており、その内容について質問させていただきたく思います。 質問内容としては、レジストリエディターにプリンター情報を追加して、それをregreadで読み取るためにはどうすれば良いかということです。プログラムとしては、以下のように書きましたが、ルートが無効になっているとエラーが出ました。 Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Echo WshShell.RegRead("HKLM\SOFTWARE\RICOH\\LoPrintLog") WScript.Echo WshShell.RegRead("HKLM\SOFTWARE\RICOH\PrintLoggFileDirectory") 課題内容としては、 1.端末設定確認.VBSというのを実行するとOSごとに同フォルダ内のTXTファイル 【(端末確認_XXXXXXXX.txt)XXXXXXはPCのhostnameが入ります】が表示される 2.いろいろな端末情報(IPアドレス・プリンタ情報・ウイルスソフトのVer等) をレジストリから引っ張ってきてTXTファイルにまとめて表示させて端末の 設定値を変更した場合に確認する。 の2点です。 長々とすみません。 どなたか教えていただければ幸いです。

  • wshでDOSコマンドを利用するには。 パイプ処理

    http://www.okweb.ne.jp/kotaeru.php3?q=305516 の続きです。 wshでDOSコマンドのnetstat -nの値をメッセージボックスで表示するには、次のスクリプトの”コマンド”の部分にnetstat -nを入れることで可能です。 (FlossenEngel 様作成) ------------------------------------- Set WshShell = WScript.CreateObject("WScript.Shell") Set objExec = WshShell.Exec("コマンド") Do While objExec.Status = 0 WScript.Sleep(100) Loop sout = "" Do While Not objExec.StdOut.AtEndOfStream sout = sout & objExec.StdOut.ReadLine & Chr(13) & Chr(10) Loop MsgBox sout ----------------------------------------------- さて、netstat -n|find " ESTABLISHED" というぐあいに パイプ処理を行うにはどうすればよいでしょうか? Set objExec = WshShell.Exec("netstat -n|find " ESTABLISHED" ") とするとエラーになります。 "を入れ子にできないようですね。 解決方法ご存知の方おしえてくださいませ。