2013-02-21 2 views
-1

Я создал vbscript для получения кучи системной информации с сервера, и одна вещь, которую мне нужно получить, - это IP-адрес сервера. По-видимому, я получаю только «адрес IP-адреса», и это не тот, который мне нужен.Как получить IP-адрес для кластера в Windows 2008 Server

Есть ли способ с vbscript для меня, чтобы связать с wmi и получить ip-адрес, который я предполагаю.

Я попробовал этот класс WMI http://msdn.microsoft.com/en-us/library/windows/desktop/aa371441(v=vs.85).aspx

Вот что у меня есть

Option Explicit 
'On Error Resume Next 

Dim strIPAddress,objItem,colItems,objWMISrvc,strComputer,objAddr 

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

getIPAddress 

Sub getIPAddress() 
    'Check if system is a cluster' 
    strIPAddress = "" 
    Set colItems = objWMISrvc.ExecQuery("SELECT * FROM MSCluster_Network") 
    If Err.Number <> 0 Then 
    For Each objItem in colItems 
     'strIPAddress = "IP Address: " & objItem. 
     For i = 0 to UBound(objItem.IPv4Addresses) 
     strIPAddress = "IP Address (" & i & "): " & objItem.IPv4Addresses(i) 
     Next 
    Next 
    End If 
'############################################################ 
' These are all commented because this is how I WAS getting 
' the ip address but it only returned the heartbeat. 
' I will still be using this if I can somehow tell if a server is a cluster or not. 
'If strIPAddress = "" Then 
'' Dim i 
    '' Set colItems = objWMISrvc.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration") 
    'For Each objItem in colItems 
    '' If Not IsNull(objItem.IPAddress) Then 
    '' strIPAddress = objItem.IPAddress(0) 
     '' 'For i = 0 to UBound(objItem.IPAddress) 
     '' ' ' strIPAddress = strIPAddress & " | " & objItem.IPAddress(i) 
     '' Next 
    '' End If 
    'Next 
'End If 

WScript.Echo strIPAddress 

End Sub 

Когда мой клиент побежал это на их кластерном сервере, то при условии пустой MsgBox, так что это не тянуть айпи адрес.

+0

Я не знаю, почему я downvoted ... =/ – envinyater

ответ

1

Прежде всего вам необходимо пространство имен mscluster, а не пространство имен cimv2.

Set cluster = GetObject("winmgmts://./root/mscluster") 

Во-вторых, то, что это адрес вам нужно? Обычно кластер имеет несколько сетей с отдельными диапазонами IP-адресов. MSCluster_Network класса позволяет перечислить сеть и их сетевые адреса:

For Each nw In cluster.ExecQuery("SELECT * FROM MSCluster_Network") 
    WScript.Echo nw.Name & vbTab & nw.Address 
Next 

выход должен быть что-то вроде этого (обратите внимание на 0 в последнем октете, который является сетевым адресом, а не фактический адрес хоста):

iSCSI 192.168.26.0 
Live Migration 192.168.25.0 
Management  192.168.23.0 
Heartbeat  192.168.24.0 

Если вы хотите, IP-адреса отдельного элемента кластера, вы можете получить их через MSCluster_NetworkInterface класс:

hostname = "foobar" 

For Each iface In cluster.ExecQuery("SELECT * FROM MSCluster_NetworkInterface") 
    If Left(iface.Name, Len(hostname)) = hostname Then 
    WScript.Echo iface.Name & vbTab & iface.Address 
    End If 
Next 

, которая должна производить такой вывод:

foobar - iSCSI-0  192.168.26.17 
foobar - Live Migration  192.168.25.23 
foobar - Management 192.168.23.42 
foobar - Heartbeat 192.168.24.13 
+0

Красивая! Позвольте мне попробовать это и вернуться к вам. Это похоже на то, что мне нужно, и спасибо за то, что я использовал неправильное пространство имен. Мне нужно узнать, что есть в каждом пространстве имен, поэтому я могу использовать правильный в будущем. – envinyater

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