ちょっと全拠点DHCPリレーに

しようと思いましてWindowsDHCPサーバをいじっていました。

読む前に先に『そんな事やらんわっ!』というツッコミを受けるような話だといっておきます。

 

まず初めにおさらいから。
WindowsDHCPサービスにはスコープ数の制限として5155個というのがあります。また、DBファイル自体がMDBファイルなので2GBの上限もあります。

ちょっと挑戦してみました。どこまで作れるのか?店舗が1200弱なので存在する店舗だけ作る分には問題ないのですが、店舗追加のたびに作業したくなかったんですね。

まずは5000個作りました。これは成功。ただ、GUIの表示がえらい遅い…

次に仕様扱いの5155近くの5150個…DBクラッシュしましたので5000個で再作成。

次に5000個のスコープをフェイルオーバの構成でもう一台のDHCPサーバに設定しようとしたところ、ここでもやっぱりDBクラッシュ!結局諦めました。

SQL実行マシンをつくり、Oracle ClientをインストしてVBSでTNSNAMESを利用せずにADODB接続して抽出&CSV出力した物をDHCPサーバがVBSからPowershellでスコープ名のリストを取得してCSVの中身と比較して作成/削除するようにしました。

Powershellの呼び出しはこんな感じで。
 Powershellで表示される初めの2行は配列に取り込む際に行飛ばししています
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set outExec = objShell.Exec("powershell Get-DhcpServerv4Scope |select Name ")
Set outStream = outExec.StdOut

 

◆64bitOS上でVBScriptを使ってCSVをADODB接続

よくこんな(↓)感じでADODB接続するスクリプトがありますがこれだけだと64bit環境だとText Driverが32bitODBCにしかないので動きません。

Set objADO = CreateObject("ADODB.Connection")
objADO.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & strPath & ";ReadOnly=1"
なのでc:\windows\SysWOW64\cscript.exeを指定して32bit強制起動するとodbcad32.exeも32bit版で呼び出されるらしく正常に稼動します。

ちなみにレジストリのWOW64にあるODBC Driverのレジストリ引っこ抜いて64bit環境に持ってきてもダメです。その他の方法だとレジストリのリダイレクトで出来るそうですがタスクで実行するのであればcscript.exe //nologoと書く必要があるので、初めからフルパスでcscript.exeをタスクに書けばいいだけなのでリダイレクトまでは試さずに終わっています。