我创建了一个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