DHCP エラー、大体わかってきた
http://d.hatena.ne.jp/yamanyon/20050823#1124816076
この問題の途中経過。
どうも netsh.exe は次のスクリプトによって呼び出されている様子。
コンソール ルート
\Microsoft Operations Manager
\管理パック
\スクリプト
\DHCP Server 2003 - Scope Monitoring
こいつをダブルクリックして表示されるボックスからの「スクリプト」タブを選ぶと、中にコードがゴリゴリ書いてあるのがわかると思います。
エラーの出所はコード中ほどのこれ。
sCommand = """""" & m_sNetshPath & """ dhcp server show all""" RunCommand sCommand, iErrCode, sOutput, sError If iErrCode = 0 Then If Not GetSubMatches(DHCP2003_MIB_COUNT_REGEX, sOutput, sOutput, _ aSubMatches) Then ThrowScriptError "Could not parse the output of netsh.exe" & _ vbCrLf & sOutput, Err End If
netsh.exe dhcp server show all コマンドが実行されてます。
iErrCode に 0 が返り、次の IF 文に引っかかって ThrowScriptError に流れているようです。
DHCP2003_MIB_COUNT_REGEX って何? と思ってもう少し前の部分を見てみると
Dim DHCP2003_MIB_COUNT_REGEX DHCP2003_MIB_COUNT_REGEX = Array( _ "\r\n" & _ "MIBCounts:\r\n" & _ "\tDiscovers = \d+\.\r\n" & _ "\tOffers = \d+\.\r\n" & _ "\tRequests = \d+\.\r\n" & _ "\tAcks = \d+\.\r\n" & _ "\tNaks = \d+\.\r\n" & _ "\tDeclines = \d+\.\r\n" & _ "\tReleases = \d+\.\r\n" & _ "\tServerStartTime = [^\r]*\r\n" & _ "\tScopes = \d+\.\r\n" _ )
思いっきり配列定義されてますが、よく見ると netsh.exe を US モードの DOS プロンプトで実行したら表示される文字列がちらほら・・・。
ということは、netsh.exe を US モードで実行すれば OK!? と思い、RunCommand 関数を眺めると、"cmd.exe /c ..." なんていう内容の文字列を持つ変数を発見。こいつに "us &" なんて混ぜてやれば OK かな? と思って実行するも玉砕。iErrCode に 1 が戻り、正常にコマンドが実行できなかった模様。なんでだろーと悩んだらやまけんさんのサイトがヒット。
http://blogs.sqlpassj.org/yamaken/archive/2004/08/16/3760.aspx
あー。間違いない、これだ。というわけでコマンド全体にダブルクォートを処理してみました。これでうまくいくかな?