-1

サーバーから一連のシステム情報を取得するためにvbscriptを作成しました。取得する必要があるのは、サーバーのIPアドレスです。どうやら私は「ハートビートIPアドレス」しか取得しておらず、それは私が必要としているものではありません。

私がwmiと連携して、私が想定しているプラ​​イベートアドレスであるIPアドレスを取得するためのvbscriptを使用する方法はありますか?

この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アドレスを取得しませんでした。

4

1 に答える 1

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
于 2013-02-22T11:19:30.623 に答える