WMI 작업: 컴퓨터 하드웨어
이 문서의 내용
컴퓨터 하드웨어에 대한 WMI 작업은 하드웨어 구성 요소의 현재 상태, 상태 또는 속성에 대한 정보를 가져옵니다. 예를 들어 컴퓨터가 데스크톱인지 노트북인지 확인할 수 있습니다. 다른 예제는 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 로 리디렉션합니다.
다음 표에는 로컬 컴퓨터에서 다양한 형식의 데이터를 가져오는 데 사용할 수 있는 스크립트 예제가 나와 있습니다.
컴퓨터에 사용 가능한 메모리의 양을 확인할 수 있나요?
Win32_OperatingSystem 클래스와 FreePhysicalMemory 속성을 사용합니다.
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
$mem = Get-WmiObject -Class Win32_OperatingSystem
"System : {0}" -f $mem.csname
"Free Memory: {0}" -f $mem.FreePhysicalMemory
컴퓨터에 DVD 드라이브가 있는지 확인할 수 있나요?
Win32_CDROMDrive 클래스를 사용하고 Name 또는 DeviceID 속성에서 약어 DVD를 확인합니다.
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
$drives = Get-WmiObject -Class Win32_CDROMDrives
$drives | Format-Table DeviceID, Description, Name -autosize
컴퓨터에 설치된 RAM의 양을 확인할 수 있나요?
Win32_ComputerSystem 클래스를 사용하고 TotalPhysicalMemory 속성의 값을 확인합니다.
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
$mem = Get-WmiObject -Class Win32_ComputerSystem
컴퓨터에 프로세서가 둘 이상 있는지 확인할 수 있나요?
Win32_ComputerSystem 클래스 및 NumberOfProcessors 속성을 사용합니다.
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
"System Name : {0}" -f $system.Name
"Number of Processors: {0}" -f $system.NumberOfProcessors
컴퓨터에 PCMCIA 슬롯이 있는지 확인할 수 있나요?
Win32_PCMCIAController 클래스를 사용하고 Count 속성의 값을 확인합니다. Count 가 0이면 컴퓨터에 PCMCIA 슬롯이 없습니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PCMCIAController")
Wscript.Echo "Number of PCMCIA slots: " & colItems.Count
$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
}
작동하지 않는 장치를 식별할 수 있나요(디바이스 관리자 에 느낌표 아이콘으로 표시된 장치)?
Win32_PnPEntity 클래스를 사용하고 WQL 쿼리에서 다음 절을 사용합니다. WHERE ConfigManagerErrorCode <> 0 이 코드는 드라이버가 누락된 USB 디바이스를 검색하지 못할 수 있습니다.
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
$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
""
}
컴퓨터에 사용되는 마우스의 속성을 확인할 수 있나요?
Win32_PointingDevice 클래스를 사용합니다. 그러면 마우스 디바이스뿐만 아니라 모든 포인팅 디바이스의 속성이 반환됩니다.
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
# 마우스 정보 가져오기 $mouse = Get-WmiObject -Class Win32_PointingDevice
<# Decode detalis #>
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"} } }
function Handedness { param ($value) switch ($value) { 0 {"Unknown"} 1 {"Not Applicable"} 2 {"Right-Handed Operation"} 3 {"Left-Handed Operation"} } }
function 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"} } }
<# Display details #>
"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
컴퓨터에 설치된 프로세서의 속도를 확인할 수 있나요?
Win32_Processor 클래스를 사용하고 MaxClockSpeed 속성의 값을 확인합니다.
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
컴퓨터가 타워인지, 미니 타워인지, 노트북인지 등을 확인할 수 있나요?
Win32_SystemEnclosure 클래스를 사용하고 ChassisType 속성의 값을 확인합니다.
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
$processors = Get-WmiObject -Class Win32_Processor
foreach ($proc in $processors)
{
"Processor ID: " + $proc.ProcessorID
"Maximum Clock Speed: " + $proc.MaxClockSpeed
}
컴퓨터의 일련 번호 및 자산 태그를 얻을 수 있나요?
Win32_SystemEnclosure 클래스와 SerialNumber 및 SMBIOSAssetTag 속성을 사용합니다.
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
$colSMBIOS = Get-WmiObject -Class Win32_SystemEnclosure
foreach ($objSMBIOS in $colSMBIOS)
{
"Part Number: " + $objSMBIOS.PartNumber
"Serial Number: " + $objSMBIOS.SerialNumber
"Asset Tag: " + $objSMBIOS.SMBIOSAssetTag
}
USB 포트에 어떤 종류의 디바이스가 연결되어 있는지 확인할 수 있나요?
Win32_USBHub 클래스를 사용하고 Description 속성을 확인합니다. 이 속성은 "Mass Storage Device" 또는 "Printing Support"와 같은 값을 가질 수 있습니다.
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
$colItems = Get-WmiObject -Class Win32_USBHub
foreach ($objItem in $colItems)
{
"Device ID: " + $objItem.DeviceID
"PNP Device ID: " + $objItem.PNPDeviceID
"Description: " + $objItem.Description
}
컴퓨터에 설치된 테이프 드라이브 수를 확인할 수 있나요?
Win32_TapeDrive 클래스를 사용한 후 SWbemObjectSet.Count 메서드를 사용합니다. Count = 0이면 컴퓨터에 테이프 드라이브가 설치되어 있지 않습니다.
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
$colItems = Get-WmiObject -Class Win32_TapeDrive
foreach ($objItem in $colItems)
{
"Number of Drives: " + $colItems.Count
}
예제
"PowerShell을 사용한 다중 스레드 시스템 자산 수집" PowerShell 샘플은 WMI 및 powershell을 사용한 다중 스레딩을 통해 다양한 유용한 시스템 정보를 수집합니다.
스크립트 및 애플리케이션에 대한 WMI 작업
WMI C++ 애플리케이션 예제
TechNet ScriptCenter