ネットワーク用の WMI タスクでは、接続と IP や MAC アドレスに関する情報の管理と取得を行います。 その他の例については、https://www.microsoft.com/technet の TechNet ScriptCenter を参照してください。
このトピックに示したスクリプト例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の WMI への接続」を参照してください。
以下の手順では、スクリプトの実行方法を説明します。
スクリプトを実行するには
- コードをコピーし、拡張子 .vbs を付けたファイル (filename.vbs など) に保存します。 テキスト エディターによってファイルに .txt 拡張子が追加されていないことを確認します。
- コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
- コマンド プロンプトで「cscript filename.vbs」と入力します。
- イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護されている場合があります。
注意
既定では、cscript により、コマンド プロンプト ウィンドウにスクリプトの出力が表示されます。 WMI スクリプトでは大量の出力が生成される可能性があるため、出力をファイルにリダイレクトすることが必要になる場合があります。 コマンド プロンプトで「cscript filename.vbs > outfile.txt」と入力し、filename.vbs スクリプトの出力を outfile.txt にリダイレクトします。
次の表に、ローカル コンピューターからさまざまな種類のデータを取得するために使用できるスクリプトの例の一覧を示します。
...WMI を使用してネットワーク接続を無効にするか |
DHCP を使用している場合は、Win32_NetworkAdapterConfiguration と ReleaseDHCPLease メソッドを使用して IP アドレスを解放します。 DHCP を使用していない場合は、WMI を使用してネットワーク接続を無効にすることはできません。 ネットワーク接続を再度有効にするには、objNetCard.RenewDHCPLease を使用します。
ReleaseDHCPLeaseAll メソッドと RenewDHCPLeaseAll メソッドを使用して、すべての DHCP リースを解放または更新することもできます。
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetCards = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration " _
& "Where IPEnabled = True")
For Each objNetCard in colNetCards
objNetCard.ReleaseDHCPLease()
Next
|
$Computer = "."
$net = Get-WMIObject -class Win32_NetworkAdapterConfiguration -ComputerName $computer
$netenabled = $net | where {$_.IPenabled}
foreach ($NetCard in $netenabled) {
"Releasing lease on: {0}" -f $netcard.caption
$netcard.ReleaseDHCPLease()
}
|
|
...NIC を無効にするか、有効にするか |
Win32_NetworkAdapter クラスと、Disable メソッドまたは Enable メソッドを使用します。 |
...特定のネットワーク接続に割り当てられている IP アドレスを特定するか |
Win32_NetworkAdapter クラスと NetConnectionID プロパティを使用して、ネットワーク接続の MAC アドレスを特定します。 次に、Win32_NetworkAdapterConfiguration クラスを使用して、その MAC アドレスに関連付けられている IP アドレスを見つけます。
strComputer = "." Set objWMIService = GetObject(_ "winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapter " _ & "Where NetConnectionID = " & _ "'Local Area Connection 2'") For Each objItem in colItems strMACAddress = objItem.MACAddress Next
Set colItems = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapterConfiguration")
For Each objItem in colItems
If objItem.MACAddress = strMACAddress Then
For Each strIPAddress in objItem.IPAddress
Wscript.Echo "IP Address: " & strIPAddress
Next
End If
Next
|
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colNics = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapter " _
& "Where NetConnectionID = " & _
"'Local Area Connection'")
For Each objNic in colNics
Set colNicConfigs = objWMIService.ExecQuery _
("ASSOCIATORS OF " _
& "{Win32_NetworkAdapter.DeviceID='" & _
objNic.DeviceID & "'}" & _
" WHERE AssocClass=Win32_NetworkAdapterSetting")
For Each objNicConfig In colNicConfigs
For Each strIPAddress in objNicConfig.IPAddress
Wscript.Echo "IP Address: " & strIPAddress
Next
Next
Next
|
|
...ネットワーク アダプターの MAC アドレスを特定するか |
Win32_NetworkAdapterConfiguration クラスを使用して、MACAddress プロパティの値を調べます。 |
...コンピューターの IP アドレスを特定するか |
Win32_NetworkAdapterConfiguration クラスを使用して、IPAddress プロパティの値を調べます。 これは配列として返されるため、For-Each ループを使用して値を取得します。
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
("Select IPAddress from Win32_NetworkAdapterConfiguration ")
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) _
to UBound(IPConfig.IPAddress)
WScript.Echo IPConfig.IPAddress(i)
Next
End If
Next
|
$Computer = "."
$IPconfigset = Get-WmiObject Win32_NetworkAdapterConfiguration
# Iterate and get IP address
$count = 0
foreach ($IPConfig in $IPConfigSet) {
if ($Ipconfig.IPaddress) {
foreach ($addr in $Ipconfig.Ipaddress) {
"IP Address : {0}" -f $addr;
$count++
}
}
}
if ($count -eq 0) {"No IP addresses found"}
else {"$Count IP addresses found on this system"}
|
|
...DHCP を介して IP アドレスの取得を開始するようにコンピューターを構成するか |
Win32_NetworkAdapterConfiguration クラスと EnableDHCP メソッドを使用します。
strComputer = "."
Set objWMIService = GetObject(_
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration " _
& "where IPEnabled=TRUE")
For Each objNetAdapter In colNetAdapters
errEnable = objNetAdapter.EnableDHCP()
Next
|
|
...コンピューターに静的 IP アドレスを割り当てるか |
Win32_NetworkAdapterConfiguration クラスと EnableStatic メソッドを使用します。
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration " _
& "where IPEnabled=TRUE")
strIPAddress = Array("192.168.1.141")
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.100")
strGatewayMetric = Array(1)
For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableStatic( _
strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(_
strGateway, strGatewaymetric)
Next
|
|
...RAS 接続や VPN 接続といったことに関する情報も取得することなく、ネットワーク アダプターに関する情報を取得するか |
Win32_NetworkAdapterConfiguration クラスを使用します。
WQL クエリで、Where IPEnabled = True という句を使用します。
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
("Select IPAddress from Win32_NetworkAdapterConfiguration" _
& " where IPEnabled=TRUE")
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) _
to UBound(IPConfig.IPAddress)
WScript.Echo IPConfig.IPAddress(i)
Next
End If
Next
|
|
...Ping.exe を使用せずにコンピューターに ping を実行するか |
Win32_PingStatus クラスを使用します。
Win32_PingStatus を使用すると、IPv4 アドレスと IPv6 アドレスの両方を持つコンピューターのデータを返すことができます。
strComputer = "." Set objWMIService = GetObject(_ "winmgmts:\\" & strComputer & "\root\cimv2") Set colPings = objWMIService.ExecQuery _ ("Select * From Win32_PingStatus where Address = '192.168.1.1'") For Each objStatus in colPings
If IsNull(objStatus.StatusCode) _
or objStatus.StatusCode<>0 Then
WScript.Echo "Computer did not respond."
Else
Wscript.Echo "Computer responded."
End If
Next
|
strComputer = "client1"
Set objShell = CreateObject("WScript.Shell")
Set objScriptExec = objShell.Exec( _
"ping -n 2 -w 1000 " & strComputer)
strPingResults = LCase(objScriptExec.StdOut.ReadAll)
If InStr(strPingResults, "reply from") Then
If InStr(strPingResults, "destination net unreachable") Then
WScript.Echo strComputer & "did not respond to ping."
Else
WScript.Echo strComputer & " responded to ping."
End If
Else
WScript.Echo strComputer & " did not respond to ping."
End If
|
|
-
スクリプトおよびアプリケーション用の WMI タスク
-
WMI C++ アプリケーションの例
-
TechNet ScriptCenter