Ağ iletişimi için WMI görevleri, bağlantılar ve IP veya MAC adresleri hakkında bilgi yönetir ve alır. Diğer örnekler için, https://www.microsoft.com/technetkonumundaki TechNet ScriptCenter'ne bakın.
Bu konuda gösterilen betik örnekleri yalnızca yerel bilgisayardan veri alır. Uzak bilgisayarlardan veri almak için betiği nasıl kullanacağınız hakkında daha fazla bilgi için bkz. Uzak Bilgisayarda WMI'ye Bağlanma.
Aşağıdaki yordamda betiğin nasıl çalıştırıldığı açıklanmaktadır.
Betik çalıştırmak için
Kodu kopyalayın ve filename.vbsgibi .vbs uzantısına sahip bir dosyaya kaydedin. Metin düzenleyicinizin dosyaya .txt uzantısı eklemediğinden emin olun.
Bir komut istemi penceresi açın ve dosyayı kaydettiğiniz dizine gidin.
Komut istemine cscript filename.vbs yazın.
Olay günlüğüne erişemiyorsanız, Yükseltilmiş komut isteminden çalıştırıyor musunuz diye kontrol edin. Güvenlik Olay Günlüğü gibi bazı Olay Günlüğü, Kullanıcı Erişim Denetimleri (UAC) tarafından korunabilir.
Not
Varsayılan olarak, cscript komut istemi penceresinde bir betiğin çıktısını görüntüler. WMI betikleri büyük miktarda çıkış üretebileceğinden, çıkışı bir dosyaya yeniden yönlendirmek isteyebilirsiniz.
filename.vbs betiğinin çıktısını outfile.txtyönlendirmek için komut istemine cscript filename.vbs > outfile.txt yazın.
Aşağıdaki tabloda, yerel bilgisayardan çeşitli veri türlerini almak için kullanılabilecek betik örnekleri listelenmiştir.
Nasıl yapabilirim...
WMI sınıfları veya yöntemleri
... WMI kullanarak bir ağ bağlantısını devre dışı bırakmak istiyor musun?
DHCP kullanıyorsanız IP adresini serbest bırakmak için Win32_NetworkAdapterConfiguration ve ReleaseDHCPLease yöntemini kullanın. DHCP kullanmıyorsanız, ağ bağlantısını devre dışı bırakmak için WMI kullanamazsınız. Ağ bağlantısını yeniden etkinleştirmek için objNetCard.RenewDHCPLeasekullanın. Ayrıca, ReleaseDHCPLeaseAll ve RenewDHCPLeaseAllyöntemlerinikullanarak tüm DHCP kiralarını serbest bırakabilir veya yenileyebilirsiniz.
VB
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
PowerShell
$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 devre dışı bırakılsın mı yoksa etkinleştirilsin mi?
... belirli bir ağ bağlantısına hangi IP adresinin atandığını belirleme
Ağ bağlantısının MAC adresini belirlemek için Win32_NetworkAdapter sınıfını ve NetConnectionID özelliğini kullanın. Ardından, MAC adresiyle ilişkilendirilmiş IP adresini bulmak için Win32_NetworkAdapterConfiguration sınıfını kullanın.
Her objItem için colItems'teki strMACAddress = objItem.MACAddress Sonraki
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
VB
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
... ağ bağdaştırıcısının MAC adresini belirlemek mi istiyorsunuz?
Win32_NetworkAdapterConfiguration sınıfını kullanın ve IPAddress özelliğinin değerini denetleyin. Bu bir dizi olarak döndürülür, bu nedenle değeri almak için bir For-Each döngüsü kullanın.
Visual Basic
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
PowerShell
$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"}
Bir bilgisayarı IP adresini DHCP üzerinden almaya başlayacak şekilde yapılandırmak mı?
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
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.exekullanmadan bir bilgisayara ping işlemi gerçekleştirmek mümkün mü?
Win32_PingStatus hem IPv4 adresleri hem de IPv6 adresleri olan bilgisayarlar için veri döndürebilir.
VB
strComputer = "." 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
VB
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
İlgili konular
Betikler ve Uygulamalar için WMI Görevlerini Oluşturma