IPアドレスを取得する(正規表現)

'______________________________________________
'
'<<IPアドレス情報の取得>>
' □機能
'  IPCONFIGの標準出力からIPアドレスの値を取得する
' □リターン
'  正常終了  : 取得件数
'  異常終了  : -1
'______________________________________________

Option Explicit

'変数定義
Dim strIP            'IPCONFIGの結果が設定
Dim aryIP            'IPアドレスが設定
Dim IPcnt            '取得件数
Dim idx              'インデックス

'IPCONFIGの結果(標準出力)を取得
If 0 <> Fnc_GetIP(strIP) Then
    Wscript.Quit(-1)
End If

'IPアドレスを取得
Select Case Cnt_GetIPAdress(strIP, aryIP)

    Case -1

        Wscript.Quit(-1)

    Case 0

        Wscript.Quit(0)

    Case Else

        IPcnt = Ubound(aryIP)
        Wscript.Echo "[Info]" & IPcnt & "件のIPAdressを取得しました"
        For idx = 1 to IPcnt
            Wscript.Echo "IP Adress : " & aryIP(idx)
        Next

        Wscript.Quit(IPcnt)

End Select

'□□□□□□□□□□□□□□□□□□□□
'IPCONFIG取得
'□□□□□□□□□□□□□□□□□□□□
'Ipconfigの標準出力を取得します
Private Function Fnc_GetIP(strIP)

    On Error Resume Next

    '<引数>
    'StrIp      : Out : Ipconfigの標準出力を設定
    '<復帰値>
    '正常終了   : 0
    '異常終了   : -1

    Dim objShell         'SHELLオブジェクト
    Dim objExec          'EXECオブジェクト

    Set objShell  = CreateObject("Wscript.Shell")
    'IPCONFIGコマンド発行
    Set objExec   = objShell.Exec("cmd.exe /c ipconfig")
    Select Case Err.Number
        Case 0

            '標準出力を取得
            With objExec.StdOut
                Do Until .AtEndOfStream
                    strIP = strIP & .ReadLine & VbCrLf
                Loop
            End With

            Fnc_GetIP = 0

        Case Else

            Wscript.Echo "[Info]ipconfigのコマンド実行でエラーが返されました"
            Wscript.Echo Err.Description & "(" & Err.Number & ")"

            Fnc_GetIP = -1

    End Select

    Set objShell = Nothing
    Set objExec  = Nothing

    On Error Goto 0

End Function

'□□□□□□□□□□□□□□□□□□□□
'IPアドレス(XXX.XXX.XXX.XXX)取得
'□□□□□□□□□□□□□□□□□□□□
'検索するデータから「IP Address....: (IPアドレス)」を
'検索して「(IPアドレス)」を取得する
Private Function Cnt_GetIPAdress(strIP,aryIP)

    On Error Resume Next

    '<引数>
    'strIp      : IN  : 検索データ
    'aryIP      : OUT : IPアドレス ※配列1より設定
    '<復帰値>
    '異常終了   : -1
    '対象なし   : 0
    '対象あり   : n(件数が設定)

    Dim objRegExp        'RegExpオブジェクト用
    Dim objMatchs        'RegExpオブジェクト用
    Dim cnt              'カウント
    Dim idx              'インデックス

    Set  objRegExp = New RegExp
    With objRegExp

        '検索パターンを設定
        .Pattern    = "IP Address(?:[^:]+): ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$"
        .Global     = True
        .IgnoreCase = True
        .MultiLine  = True

        '検索開始&結果を設定
        Set objMatchs = .Execute(strIP)
        Select Case Err.Number
            Case 0

                cnt = objMatchs.Count
                Redim AryIP(cnt)
                For idx = 1 To cnt
                    AryIP(idx) = objMatchs(idx-1).SubMatches(0)
                Next

                Cnt_GetIPAdress = cnt

            Case Else

                Wscript.Echo "[Info]Executeメソッドの実行でエラーが返されました"
                Wscript.Echo Err.Description & "(" & Err.Number & ")"

                Cnt_GetIPAdress = -1

        End Select

    End With

    Set objRegExp   = Nothing
    Set objMatchs   = Nothing

    On Error Goto 0

End Function