0

私は vbscript でスクリプトを作成しようとしていますが、ほぼ初心者であり、オンライン チュートリアルが機能しなかったため、ここに投稿して助けを求めることに頼らなければなりませんでした。

さまざまなソースから組み合わせて一致させたスクリプトは、ドメイン、ユーザー、コンピューター名、IP アドレスを表示します。スクリプトは機能しています。ただし、特定の環境では、ユーザーが複数の IP アドレスを持つ可能性があり、MsgBox に表示すると、最後の IP アドレスの結果のみが返され、多くの場合、これは間違っています。

アドレスを配列に追加/保存し、複数の結果があった場合に MsgBox に他の IP アドレスを表示させる方法を知りたいです。

ありがとうございました。


以下にスクリプトを添付します。

Option Explicit
DIM WshNetwork, strComputer, IPConfigSet, objWMIService, IPConfig, i, j, strIP, title, message, colItems, objItem
DIM arrIPAddress, columnC, strIPAddress, testIP(3)

Set WshNetwork = WScript.CreateObject("WScript.Network")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set IPConfigSet = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration",,48) 
For Each objItem in colItems 
    If isNull(objItem.IPAddress) Then
    Else
        Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
        strIP = objItem.IPAddress(0)
    End If
Next

title = "Who Am I?"

message =   "Domain: " & vbTab & vbTab & WshNetwork.UserDomain & VbCrlf & _
            "User Name: " & vbTab & UCase(WshNetwork.UserName) & VbCrlf & _
            "Computer Name: " & vbTab & WshNetwork.ComputerName & VbCrlf & _
            "IP Address1: " & vbTab & strIP 

Msgbox message, , title

4

3 に答える 3

1

コードMsgBoxでは、最後に列挙されたネットワーク アダプターの最初のアドレスが表示されます。すべての IP アドレスを表示する場合は、次のように変更します。

Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration",,48)
For Each objItem in colItems 
    If isNull(objItem.IPAddress) Then
    Else
        Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
        strIP = objItem.IPAddress(0)
    End If
Next

title = "Who Am I?"

message =   "Domain: " & vbTab & vbTab & WshNetwork.UserDomain & VbCrlf & _
            "User Name: " & vbTab & UCase(WshNetwork.UserName) & VbCrlf & _
            "Computer Name: " & vbTab & WshNetwork.ComputerName & VbCrlf & _
            "IP Address1: " & vbTab & strIP

これに:

Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
ReDim arrIP(-1)
For Each objItem In colItems
    For Each addr In objItem.IPAddress
        ReDim Preserve arrIP(UBound(arrIP)+1)
        arrIP(UBound(arrIP)) = addr
    Next
Next

title = "Who Am I?"

message = "Domain:" & vbTab & vbTab & WshNetwork.UserDomain & vbNewLine & _
          "User Name:" & vbTab & UCase(WshNetwork.UserName) & vbNewLine & _
          "Computer Name:" & vbTab & WshNetwork.ComputerName & vbNewLine & _
          "IP Address1:" & vbTab & Join(arrIP, ", ")
于 2013-08-06T08:25:08.927 に答える
0

以下は Windows 8 でテスト済みです。完璧に動作します!

    Option Explicit
    DIM objHTTP, WshNetwork, strComputer, IPConfigSet, objWMIService, IPConfig, i, j, strIP, title, message, colItems, objItem
    DIM arrIPAddress, columnC, strIPAddress, testIP(3), addr

    Set objHTTP = WScript.CreateObject("MSXML2.ServerXmlHttp")
    objHTTP.Open "GET", "http://icanhazip.com", False
    objHTTP.Send

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set IPConfigSet = objWMIService.ExecQuery _
        ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 

    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
    ReDim arrIP(-1)
        For Each objItem In colItems
        For Each addr In objItem.IPAddress
    ReDim Preserve arrIP(UBound(arrIP)+1)
    arrIP(UBound(arrIP)) = addr
        Next
    Next

    title = "Who Am I?"

    message = "Domain:" & vbTab & vbTab & WshNetwork.UserDomain & vbNewLine & _
      "User Name:" & vbTab & UCase(WshNetwork.UserName) & vbNewLine & _
      "Computer Name:" & vbTab & WshNetwork.ComputerName & vbNewLine & _
      "Public IP Address: " & vbTab & objHTTP.ResponseText & vbNewLine & _
      "Network IPs v4 & v6: " & vbNewLine & vbTab & vbTab & Join(arrIP, ", " & vbNewLine & vbTab & vbTab) & "."
    Msgbox message, , title
    Set objHTTP = Nothing</code>
于 2013-12-01T09:24:00.443 に答える