2013-08-06 2 views
0

Я пытаюсь написать сценарий в vbscript, но быть рядом с noob и онлайн-учебниками не получилось, мне пришлось прибегнуть к публикации здесь с просьбой о помощи.VBscript для использования с несколькими IP-адресами

Сценарий, который я смешивал и сопоставляю из разных источников, отображает имя домена, пользователя, компьютера, IP-адрес. Скрипт работает. Однако в определенной среде пользователь может потенциально иметь несколько IP-адресов, а при отображении в MsgBox возвращается только последний результат IP-адреса, и во многих случаях это неверно.

Я хотел бы знать, как добавить/сохранить адрес в массиве и показать MsgBox другие IP-адреса, если было несколько результатов.

спасибо.


Script прилагается ниже:

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 

ответ

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, ", ") 
+0

Привет Ansgar, Спасибо за ваш ответ. Это близко к тому, что я хочу, но могу ли я спросить, как я могу просто захватить часть IP-адреса, а не захватывать как IP, так и MAC-адрес. –

+0

Вышеприведенные данные содержат только IP-адреса. Вы вводите в заблуждение адреса IPv6 с MAC-адресами? –

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> 
0
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 
+0

Этот первый без MSGBox даст вам второй бокс –

+0

Привет и приветствуем переполнение стека. Только ответы на код, как правило, не очень полезны, если они не объясняют, что они делают. Это относится к длинным сегментам кода. Пожалуйста, подумайте над тем, чтобы добавить объяснение того, что вы изменили или написали. – JasonMArcher

Смежные вопросы