2013-02-21 34 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