如何在Windows 2008 Server中获取群集的IP地址



我创建了一个vbscript来从服务器获取一堆系统信息,需要获取的一件事是服务器的IP地址。显然,我只得到了"心跳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 & "rootcimv2")
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

当我的客户端在他们的集群服务器上运行这个时,它提供了一个空的消息框,所以它没有提取ip地址。

首先,您需要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

最新更新