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

あー。間違いない、これだ。というわけでコマンド全体にダブルクォートを処理してみました。これでうまくいくかな?