Bilgisayar donanımı için WMI görevleri, donanım bileşenlerinin varlığı, durumu veya özellikleri hakkında bilgi alır. Örneğin, bir bilgisayarın masaüstü mü yoksa dizüstü bilgisayar mı olduğunu belirleyebilirsiniz. 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. Betiği uzak bilgisayarlardan veri almak için kullanma hakkında daha fazla bilgi için bkz. Uzak Bilgisayarda WMI'ye Bağlanma.
Betik çalıştırmak için
Aşağıdaki yordamda betiğin nasıl çalıştırıldığı açıklanmaktadır.
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ılıp çalıştıramadığınızı denetleyin. 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 çıkışı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...
WMI sınıfları veya yöntemleri
... bir bilgisayarda ne kadar boş bellek olduğunu belirlemek mi?
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings
Wscript.Echo "Available Physical Memory: " & objOperatingSystem.FreePhysicalMemory
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
Wscript.Echo "System Name: " & objComputer.Name
Wscript.Echo "Number of Processors: " & objComputer.NumberOfProcessors
Next
PowerShell
"System Name : {0}" -f $system.Name
"Number of Processors: {0}" -f $system.NumberOfProcessors
... bir bilgisayarda PCMCIA yuvası olup olmadığını belirleme
Win32_PCMCIAController sınıfını kullanın ve Sayısı özelliğinin değerini denetleyin.
Count 0 ise, bilgisayarda PCMCIA yuvaları yoktur.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PCMCIAController")
Wscript.Echo "Number of PCMCIA slots: " & colItems.Count
Win32_PnPEntity sınıfını kullanın ve WQL sorgunuzda aşağıdaki yan tümceyi kullanın.
WHERE ConfigManagerErrorCode <> 0 Bu kodun eksik sürücüleri olan USB cihazlarını algılamayabileceğini unutmayın.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0")
For Each objItem in colItems
Wscript.Echo "Class GUID: " & objItem.ClassGuid
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Device ID: " & objItem.DeviceID
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
Wscript.Echo "Service: " & objItem.Service
Next
PowerShell
$baddevices = Get-WmiObject Win32_PNPEntity | where {$_.ConfigManagerErrorcode -ne 0}
" Total Bad devices: {0}" -f $baddevices.count
foreach ($device in $baddevices) {
"Name : {0}" -f $device.name
"Class Guid : {0}" -f $device.Classguid
"Description : {0}" -f $device.Description
"Device ID : {0}" -f $device.deviceid
"Manufacturer : {0}" -f $device.manufactuer
"PNP Devcice Id : {0}" -f $device.PNPDeviceID
"Service Name : {0}" -f $device.service
""
}
... bilgisayarda kullanılan farenin özelliklerini belirlemek mi?
Win32_PointingDevice sınıfını kullanın. Bu, yalnızca fare cihazlarını değil, tüm işaret cihazlarının özelliklerini döndürür.
... bilgisayarda yüklü bir işlemcinin hızını belirlemek mi?
Win32_Processor sınıfını kullanın ve MaxClockSpeed özelliğinin değerini denetleyin.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
Wscript.Echo "Processor Id: " & objItem.ProcessorId
Wscript.Echo "Maximum Clock Speed: " & objItem.MaxClockSpeed
Next
... bir bilgisayarın kule, mini kule, dizüstü bilgisayar vb. olup olmadığını belirlemek için?
Win32_SystemEnclosure sınıfını kullanın ve ChassisType özelliğinin değerini denetleyin.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colChassis = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objChassis in colChassis
For Each objItem in objChassis.ChassisTypes
Wscript.Echo "Chassis Type: " & objItem
Next
Next
... BIR USB bağlantı noktasına ne tür bir cihaz takıldığını belirlemek mi?
Win32_USBHub sınıfını kullanın ve Description özelliğini denetleyin. Bu özelliğin "Yığın Depolama Cihazı" veya "Yazdırma Desteği" gibi bir değeri olabilir.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_USBHub")
For Each objItem in colItems
Wscript.Echo "Device ID: " & objItem.DeviceID
Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo
Next
... bir bilgisayarda kaç bant sürücüsü yüklü olduğunu saptamak mı?
sınıfını Win32_TapeDrive kullanın ve ardından SWbemObjectSet.Count yöntemini kullanın. Count = 0 ise, bilgisayara herhangi bir bant sürücüsü yüklenmez.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_TapeDrive")
Wscript.Echo "Number of tape drives: " & colItems.Count
PowerShell
$colItems = Get-WmiObject -Class Win32_TapeDrive
foreach ($objItem in $colItems)
{
"Number of Drives: " + $colItems.Count
}
Örnekler
"PowerShell ile Çok İş Parçacıklı Sistem Varlığı Toplama" PowerShell örneği, WMI ve powershell ile çoklu iş parçacığı kullanımı aracılığıyla çok sayıda yararlı sistem bilgisi toplar.