01.
' 管理者として cscript 実行を強制する
02.
Set
obj = Wscript.CreateObject(
"Shell.Application"
)
03.
if Wscript.Arguments.Count = 0 then
04.
obj.ShellExecute
"cscript.exe"
, WScript.ScriptFullName &
" runas"
,
""
,
"runas"
, 1
05.
Wscript.Quit
06.
end if
07.
08.
const WMI_HKEY_LOCAL_MACHINE = &H80000002
09.
10.
Set
objRegistry = GetObject(
"Winmgmts:root\default:StdRegProv"
)
11.
12.
strBasePath =
"SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI"
13.
14.
Call
objRegistry.EnumKey( WMI_HKEY_LOCAL_MACHINE, strBasePath, aKeys )
15.
16.
For
Each
strKeyPath in aKeys
17.
Wscript.Echo strKeyPath
18.
Next
19.
20.
Wscript.StdIn.ReadLine
概要Windows でデータベースに接続する際、ODBC データソースに登録せずに動的に利用する場合には、ドライバの正しい文字列が必要になリます。レジストリエディタで参照すればいいのですが、結構面倒なのでこのスクリプトを使えばすぐ取り出せます。 最初の『管理者として cscript 実行を強制する』は、cscript での実行を強制するついでに実装しています。(なんらかの制限環境でも動くようにとの考慮です。) 目的は、レジストリのキーの一覧ですが、キーの一覧は知る限り、WMI でしか取得できないので、GetObject("Winmgmts:root\default:StdRegProv") でレジストリ処理用のオブジェクトを取得して使用します。 一覧表示は、cscript で実行を強制しているので単純に Wscript.Echo で出力。コマンドプロンプトを新たに作成して実行するので、結果の表示を止めるために、Wscript.StdIn.ReadLine です。実際の結果のサンプル実際はいくつか変なのが混じっていますが ODBC 接続のドライバ文字列が欲しい場合を想定しているので、その場合はそれは排除して見れると思います。※ コマンドプロンプトのプロパティで、簡易編集モードを ON にして、範囲をドラッグして右クリックでコピーできます。 ※ コマンドプロンプトならば、『reg query HKLM\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI』ですから、リダイレクトしてファイルに表示結果を書き込めばいいでしょう( 但し、キーが全て表示されるのでとても見にくいです )
reg query HKLM\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI > list.txt