Aracılığıyla paylaş


WMI Görevleri: Bilgisayar Donanımı

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.

  1. 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.
  2. Bir komut istemi penceresi açın ve dosyayı kaydettiğiniz dizine gidin.
  3. Komut istemine cscript filename.vbs yazın.
  4. 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? sınıf Win32_OperatingSystem ve FreePhysicalMemory özelliğini kullanın.
VB
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
PowerShell
$mem = Get-WmiObject -Class Win32_OperatingSystem
"System : {0}" -f $mem.csname
"Free Memory: {0}" -f $mem.FreePhysicalMemory
... bir bilgisayarın DVD sürücüsü olup olmadığını belirleme

Win32_CDROMDrive sınıfını kullanın ve Adı veya DeviceID özelliğindeki DVD kısaltmasını denetleyin.

VB
strComputer = "."
Set objWMIService = GetObject( "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
For Each objItem in colItems
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Name: " & objItem.Name 
Next
PowerShell
$drives = Get-WmiObject -Class Win32_CDROMDrives
$drives | Format-Table DeviceID, Description, Name -autosize
... bir bilgisayarda ne kadar RAM'in yüklü olduğunu belirlemek mi?

Win32_ComputerSystem sınıfını kullanın ve TotalPhysicalMemory özelliğinin değerini denetleyin.

VB
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 "Total Physical Memory: " & objComputer.TotalPhysicalMemory
Next
PowerShell
$mem = Get-WmiObject -Class Win32_ComputerSystem
... bir bilgisayarın birden fazla işlemcisi olup olmadığını belirlemek mi?

numberOfProcessors Win32_ComputerSystem sınıfını ve özelliğini kullanın.

VB
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

PowerShell
              
              $Pcmcia = Get-WmiObject -Class Win32_PCMCIAController 

if (!$pcmcia.count) { "Number of PCMCIA Slots: {0}" -f 1 }else { "Number of PCMCIA Slots: {0}" -f $pcmcia.count }

... çalışmayan cihazları (Cihaz Yöneticisiünlem işaretiyle işaretlenmiş cihazlar) tanımlansın mı?

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.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PointingDevice")
For Each objItem in colItems
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Device Interface: " & objItem.DeviceInterface
    Wscript.Echo "Double Speed Threshold: " & objItem.DoubleSpeedThreshold
    Wscript.Echo "Handedness: " & objItem.Handedness
    Wscript.Echo "Hardware Type: " & objItem.HardwareType
    Wscript.Echo "INF File Name: " & objItem.InfFileName
    Wscript.Echo "INF Section: " & objItem.InfSection
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "Number Of Buttons: " & objItem.NumberOfButtons
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Pointing Type: " & objItem.PointingType
    Wscript.Echo "Quad Speed Threshold: " & objItem.QuadSpeedThreshold
    Wscript.Echo "Resolution: " & objItem.Resolution
    Wscript.Echo "Sample Rate: " & objItem.SampleRate
    Wscript.Echo "Synch: " & objItem.Synch
Next

PowerShell
              
              # Fare bilgilerini alma 

$mouse = Get-WmiObject -Class Win32_PointingDevice

<# Detalis kodunu çözme #>

function Deviceinterface { param ($value) switch ($value) { 0 {"Other"} 1 {"Unknown"} 3 {"Serial"} 4 {"PS/2"} 5 {"Infrared"} 6 {"HP-HIL""} 7 {"Bus Mouse"} 8 {"ADP (Apple Desktop Bus)"} 160 {"Bus Mouse DB-9"} 161 {"Bus Mouse Micro-DIN"} 162 {"USB"} } }

işlev Teslimi { param ($value) anahtarı ($value) { 0 {"Bilinmiyor"} 1 {"Uygulanamaz"} 2 {"Right-Handed İşlemi"} 3 {"Left-Handed İşlemi"} } }

işlev Pointingtype {

param ($value) switch ($value) { 1 {"Other"} 2 {"Unknown"} 3 {"Mouse"} 4 {"Track Ball"} 5 {"Track Point"} 6 {"Glide Point"} 7 {"Touch Pad"} 8 {"Touch Screen"} 9 {"Mouse - Optical Sensor"} } }

<# Ayrıntıları görüntüle #>

"Mouse Information on System: {0}" -f $mouse.systemname "Description : {0}" -f $mouse.Description "Device ID : {0}" -f $mouse.DeviceID "Device Interface : {0}" -f (Deviceinterface($mouse.DeviceInterface)) "Double Speed Threshold : {0}" -f $mouse.DoubleSpeedThreshold "Handedness : {0}" -f (Handedness($mouse.handedness)) "Hardware Type : {0}" -f $mouse.Hardwaretype "INF FIle Name : {0}" -f $mouse.InfFileName "Inf Section : {0}" -f $mouse.InfSection "Manufacturer : {0}" -f $mouse.Manufacturer "Name : {0}" -f $mouse.Name "Number of buttons : {0}" -f $mouse.NumberOfButtons "PNP Device ID : {0}" -f $mouse.PNPDeviceID "Pointing Type : {0}" -f (Pointingtype ($mouse.PointingType)) "Quad Speed Threshold : {0}" -f $mouse.QuadSpeedThreshold "Resolution : {0}" -f $mouse.Resolution "Sample Rate : {0}" -f $mouse.SampleRate "Synch : {0}" -f $mouse.Synch

... 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
PowerShell
$processors = Get-WmiObject -Class Win32_Processor
foreach ($proc in $processors)
{
    "Processor ID: " + $proc.ProcessorID
    "Maximum Clock Speed: " + $proc.MaxClockSpeed
}
... bilgisayarın seri numarası ve varlık etiketi alınsın mı?

Win32_SystemEnclosure sınıfını ve SerialNumber ve SMBIOSAssetTag özelliklerini kullanın.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSMBIOS = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objSMBIOS in colSMBIOS
    Wscript.Echo "Part Number: " & objSMBIOS.PartNumber
    Wscript.Echo "Serial Number: " & objSMBIOS.SerialNumber
    Wscript.Echo "Asset Tag: " & objSMBIOS.SMBIOSAssetTag
Next

PowerShell
              
              $colSMBIOS = Get-WmiObject -Class Win32_SystemEnclosure 

foreach ($objSMBIOS in $colSMBIOS) { "Part Number: " + $objSMBIOS.PartNumber "Serial Number: " + $objSMBIOS.SerialNumber "Asset Tag: " + $objSMBIOS.SMBIOSAssetTag }

... 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

PowerShell
              
              $colItems = Get-WmiObject -Class Win32_USBHub 

foreach ($objItem in $colItems) { "Device ID: " + $objItem.DeviceID "PNP Device ID: " + $objItem.PNPDeviceID "Description: " + $objItem.Description }

... 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.

Betikler ve Uygulamalar için WMI Görevlerini

WMI C++ Uygulama Örnekleri

TechNet ScriptCenter