2013-02-21 59 views
-1

我創建了一個vbscript來從服務器獲取一堆系統信息,並且我需要獲得的一件事是服務器的IP地址。顯然,我只是得到了「心跳ip地址」,這不是我需要的。如何獲得Windows 2008服務器中的羣集的IP地址

有沒有一種方式與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,所以也沒拉的IP地址。

+0

我不知道爲什麼我一直downvoted ... =/ – envinyater 2013-02-26 20:32:22

回答

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 2013-02-22 13:27:31