Microsoft MVP성태의 닷넷 이야기
Windows: 160. WMI 쿼리를 명령행에서 간단하게 수행하는 wmic.exe [링크 복사], [링크+제목 복사],
조회: 23062
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

WMI 쿼리를 명령행에서 간단하게 수행하는 wmic.exe

그전에도 그냥 기계적으로 사용했다가 이번에 사용하면서 눈에 들어오더군요. ^^;

Useful WMI(C) commands
; http://virot.eu/useful-wmic-commands/

그러니까 말 그대로 WMI 쿼리를 명령행에서 쉽게 사용할 수 있도록 도와주는 프로그램입니다. 예를 들어, WMI Provider 중에 Win32_ComputerSystem 클래스의 경우,

Win32_ComputerSystem class
; https://learn.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-computersystem

[Dynamic, Provider("CIMWin32"), SupportsUpdate, UUID("{8502C4B0-5FBB-11D2-AAC1-006008C78BC7}"), AMENDMENT]
class Win32_ComputerSystem : CIM_UnitaryComputerSystem
{
  uint16   AdminPasswordStatus;
  boolean  AutomaticManagedPagefile;
  boolean  AutomaticResetBootOption;
  boolean  AutomaticResetCapability;
  uint16   BootOptionOnLimit;
  uint16   BootOptionOnWatchDog;
  ...[생략]...
  boolean  HypervisorPresent;
  ...[생략]...
  string   Status;
  string   SupportContactDescription[];
  string   SystemFamily;
  string   SystemSKUNumber;
  uint16   SystemStartupDelay;
  string   SystemStartupOptions[];
  uint8    SystemStartupSetting;
  string   SystemType;
  uint16   ThermalState;
  uint64   TotalPhysicalMemory;
  string   UserName;
  uint16   WakeUpType;
  string   Workgroup;
};

제공하는 값들 중에 HypervisorPresent 속성을 구하려면 (C#에서) 다음과 같은 식의 WMI 쿼리를 작성해야 합니다.

// http://wutils.com/wmi/root/cimv2/win32_computersystem/cs-samples.html

ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_ComputerSystem Where Name=\"" + Environment.MachineName + "\"");
    
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    
ManagementObjectCollection queryCollection = searcher.Get();
    
foreach (ManagementObject m in queryCollection) 
{
    Console.WriteLine("HypervisorPresent : {0}", m["HypervisorPresent"]);
}

저 값 하나 보자고 C# 코딩까지 하기에는 좀 그렇죠. ^^ 그래서 (운영체제에 기본 포함된) wmic.exe를 사용하면 "Win32_" 접미사를 떼고 다음과 같이 간단하게 호출할 수 있습니다.

C:\temp> wmic ComputerSystem get HypervisorPresent
HypervisorPresent
TRUE

C:\temp> 

어떤 쿼리를 지원하는지에 대해서는 wmic 도움말(/?)에 보면 다음과 같이 목록을 확인할 수 있습니다.

ALIAS                    - Access to the aliases available on the local system
BASEBOARD                - Base board (also known as a motherboard or system board) management.
BIOS                     - Basic input/output services (BIOS) management.
BOOTCONFIG               - Boot configuration management.
CDROM                    - CD-ROM management.
COMPUTERSYSTEM           - Computer system management.
CPU                      - CPU management.
CSPRODUCT                - Computer system product information from SMBIOS.
DATAFILE                 - DataFile Management.
DCOMAPP                  - DCOM Application management.
DESKTOP                  - User's Desktop management.
DESKTOPMONITOR           - Desktop Monitor management.
DEVICEMEMORYADDRESS      - Device memory addresses management.
DISKDRIVE                - Physical disk drive management.
DISKQUOTA                - Disk space usage for NTFS volumes.
DMACHANNEL               - Direct memory access (DMA) channel management.
ENVIRONMENT              - System environment settings management.
FSDIR                    - Filesystem directory entry management.
GROUP                    - Group account management.
IDECONTROLLER            - IDE Controller management.
IRQ                      - Interrupt request line (IRQ) management.
JOB                      - Provides  access to the jobs scheduled using the schedule service.
LOADORDER                - Management of system services that define execution dependencies.
LOGICALDISK              - Local storage device management.
LOGON                    - LOGON Sessions.
MEMCACHE                 - Cache memory management.
MEMORYCHIP               - Memory chip information.
MEMPHYSICAL              - Computer system's physical memory management.
NETCLIENT                - Network Client management.
NETLOGIN                 - Network login information (of a particular user) management.
NETPROTOCOL              - Protocols (and their network characteristics) management.
NETUSE                   - Active network connection management.
NIC                      - Network Interface Controller (NIC) management.
NICCONFIG                - Network adapter management.
NTDOMAIN                 - NT Domain management.
NTEVENT                  - Entries in the NT Event Log.
NTEVENTLOG               - NT eventlog file management.
ONBOARDDEVICE            - Management of common adapter devices built into the motherboard (system board).
OS                       - Installed Operating System/s management.
PAGEFILE                 - Virtual memory file swapping management.
PAGEFILESET              - Page file settings management.
PARTITION                - Management of partitioned areas of a physical disk.
PORT                     - I/O port management.
PORTCONNECTOR            - Physical connection ports management.
PRINTER                  - Printer device management.
PRINTERCONFIG            - Printer device configuration management.
PRINTJOB                 - Print job management.
PROCESS                  - Process management.
PRODUCT                  - Installation package task management.
QFE                      - Quick Fix Engineering.
QUOTASETTING             - Setting information for disk quotas on a volume.
RDACCOUNT                - Remote Desktop connection permission management.
RDNIC                    - Remote Desktop connection management on a specific network adapter.
RDPERMISSIONS            - Permissions to a specific Remote Desktop connection.
RDTOGGLE                 - Turning Remote Desktop listener on or off remotely.
RECOVEROS                - Information that will be gathered from memory when the operating system fails.
REGISTRY                 - Computer system registry management.
SCSICONTROLLER           - SCSI Controller management.
SERVER                   - Server information management.
SERVICE                  - Service application management.
SHADOWCOPY               - Shadow copy management.
SHADOWSTORAGE            - Shadow copy storage area management.
SHARE                    - Shared resource management.
SOFTWAREELEMENT          - Management of the  elements of a software product installed on a system.
SOFTWAREFEATURE          - Management of software product subsets of SoftwareElement.
SOUNDDEV                 - Sound Device management.
STARTUP                  - Management of commands that run automatically when users log onto the computer system.
SYSACCOUNT               - System account management.
SYSDRIVER                - Management of the system driver for a base service.
SYSTEMENCLOSURE          - Physical system enclosure management.
SYSTEMSLOT               - Management of physical connection points including ports,  slots and peripherals, and proprietary connections points.
TAPEDRIVE                - Tape drive management.
TEMPERATURE              - Data management of a temperature sensor (electronic thermometer).
TIMEZONE                 - Time zone data management.
UPS                      - Uninterruptible power supply (UPS) management.
USERACCOUNT              - User account management.
VOLTAGE                  - Voltage sensor (electronic voltmeter) data management.
VOLUME                   - Local storage volume management.
VOLUMEQUOTASETTING       - Associates the disk quota setting with a specific disk volume.
VOLUMEUSERQUOTA          - Per user storage volume quota management.
WMISET                   - WMI service operational parameters management.

위의 내용을 보면, "wmic ComputerSystem ..."에서의 "ComputerSystem"은 "Win32_ComputerSystem"에서 "Win32_"를 떼어냈다기보다는 그냥 별칭으로 정의된 것에 불과한 것임을 알 수 있습니다.

그런데, 저 목록에 없는 경우는 퀴리를 못하는 걸까요? 예를 들어, 지난 글에 다룬,

C# - Open Hardware Monitor를 이용한 CPU 온도 정보
; https://www.sysnet.pe.kr/2/0/11904

"root\WMI" 네임스페이스에 속한 "MSAcpi_ThermalZoneTemperature" 클래스의 경우 저 목록에 없습니다. 괜찮습니다. ^^ 다음과 같이 직접 네임스페이스와 "path" 인자의 도움으로 간단하게 해결이 됩니다.

C:\Windows\System32>wmic /NAMESPACE:\\root\WMI path MSAcpi_ThermalZoneTemperature get CurrentTemperature
CurrentTemperature
3010
3030

윈도우 10부터 "WMIC is deprecated"라는 문구가 뜨는 걸로 봐서 더 이상 지원이 안 될 듯싶은데 어쨌든 현재 상황에서 유용하게 시스템 조회를 할 수 있는 하나의 도구임에는 분명합니다.




참고로, 아래의 쿼리들도 한번 봐 두면 좋겠죠! ^^

A Brief Usage Guide for Wmic
; https://www.xorrior.com/wmic-the-enterprise/

Host Enumeration:

    --- OS Specifics ---
    wmic os LIST Full (* To obtain the OS Name, use the "caption" property)
    wmic computersystem LIST full

    --- Anti-Virus ---
    wmic /namespace:\\root\securitycenter2 path antivirusproduct

    --- Peripherals ---
    wmic path Win32_PnPdevice 

    --- Installed Updates ---
    wmic gfe list brief

    --- Directory Listing and File Search ---
    wmic DATAFILE where "path='\\Users\\test\\Documents\\'" GET Name,readable,size
    wmic DATAFILE where "drive='C:' AND Name like '%password%'" GET Name,readable,size /VALUE

    --- Local User Accounts ---
    wmic USERACCOUNT Get Domain,Name,Sid

Domain Enumeration:

    --- Domain and DC Info ---
    wmic NTDOMAIN GET DomainControllerAddress,DomainName,Roles /VALUE

    --- Domain User Info ---
    wmic /NAMESPACE:\\root\directory\ldap PATH ds_user where "ds_samaccountname='testAccount'" GET 

    --- List All Users ---
    wmic /NAMESPACE:\\root\directory\ldap PATH ds_user GET ds_samaccountname

    --- List All Groups ---
    wmic /NAMESPACE:\\root\directory\ldap PATH ds_group GET ds_samaccountname

    --- Members of A Group ---
    wmic /NAMESPACE:\\root\directory\ldap PATH ds_group where "ds_samaccountname='Domain Admins'" Get ds_member /Value

    --- List All Computers ---
    wmic /NAMESPACE:\\root\directory\ldap PATH ds_computer GET ds_samaccountname
    OR
    wmic /NAMESPACE:\\root\directory\ldap PATH ds_computer GET ds_dnshostname

Misc:

    --- Execute Remote Command ---
    wmic process call create "cmd.exe /c calc.exe"
    OR
    wmic /node:server1 process call create "win32calc.exe"

    --- Enable Remote Desktop ---
    wmic rdtoggle where AllowTSConnections="0" call SetAllowTSConnections "1"
    OR
    wmic /node:remotehost path Win32_TerminalServiceSetting where AllowTSConnections="0" call SetAllowTSConnections "1"

Find partition letters on physical drives using wmic
; https://superuser.com/questions/634842/find-partition-letters-on-physical-drives-using-wmic

    --- how to get primary harddisk serial number only ---
    wmic logicaldisk where (DeviceID="C:") assoc /assocclass:Win32_LogicalDiskToPartition
    wmic partition where (DeviceID="Disk #0, Partition #0") assoc /assocclass:Win32_DiskDriveToDiskPartition
    wmic path win32_diskdrive where deviceid='\\\\.\\PHYSICALDRIVE0' get serialnumber




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/25/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-07-08 09시10분
ex) wmic /NAMESPACE:\\root\cimv2 path SoftwareLicensingProduct WHERE (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseStatus=1) get *
정성태
2022-10-30 11시31분
파이썬에 wmi를 지원하는 패키지가 있군요. ^^ 이것을 이용하면 다음과 같이 값을 가져올 수 있습니다.

# pip install wmi

import wmi
data = wmi.WMI()

result = data.Win32_ComputerSystem()
print(type(result)) # <class 'list'>

print(result[0].HypervisorPresent) # True
정성태

... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1100정성태8/17/201128915.NET Framework: 236. SqlDbType - DateTime, DateTime2, DateTimeOffset의 차이점파일 다운로드1
1099정성태8/15/201128342오류 유형: 132. 어느 순간 갑자기 접속이 안 되는 TFS 서버
1098정성태8/15/201150357웹: 24. 네이버는 어떻게 로그인 처리를 할까요? [2]
1097정성태8/15/201121655.NET Framework: 235. 메서드의 메타 데이터 토큰 값으로 클래스를 찾아내는 방법
1096정성태8/15/201125794디버깅 기술: 42. Watson Bucket 정보를 이용한 CLR 응용 프로그램 예외 분석 - (2)
1095정성태8/14/201126229디버깅 기술: 41. Windbg - 비정상 종료된 닷넷 프로그램의 StackTrace에서 보이는 offset 값 의미
1094정성태8/14/201130612오류 유형: 131. Fiddler가 강제 종료된 경우, 웹 사이트 방문이 안되는 현상
1093정성태7/27/201124235오류 유형: 130. Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor ... Access is denied.
1092정성태7/22/201126637Team Foundation Server: 46. 코드 이외의 파일에 대해 소스 제어에서 제외시키는 방법
1091정성태7/21/201125677개발 환경 구성: 128. WP7 Emulator 실행 시 audiodg.exe의 CPU 소모율 증가 [2]
1089정성태7/18/201131257.NET Framework: 234. 왜? Button 컨트롤에는 MouseDown/MouseUp 이벤트가 발생하지 않을까요?파일 다운로드1
1088정성태7/16/201124313.NET Framework: 233. Entity Framework 4.1 - 윈도우 폰 7에서의 CodeFirst 순환 참조 문제파일 다운로드1
1087정성태7/15/201127023.NET Framework: 232. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 - 두 번째 이야기파일 다운로드1
1086정성태7/14/201128449.NET Framework: 231. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 [1]파일 다운로드1
1085정성태7/14/201128893.NET Framework: 230. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류 - 두 번째 이야기파일 다운로드1
1084정성태7/11/201134176.NET Framework: 229. SQL 서버 - DB 테이블의 데이터 변경에 대한 알림 처리 [4]파일 다운로드1
1083정성태7/11/201128221.NET Framework: 228. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류
1082정성태7/10/201127790.NET Framework: 227. basicHttpBinding + 사용자 정의 인증 구현 [2]파일 다운로드1
1081정성태7/9/201127111VC++: 53. Windows 7에서 gcc.exe 실행 시 Access denied 오류 [2]
1080정성태7/8/201125607웹: 23. Sysnet 웹 사이트의 HTML5 변환 기록 - 두 번째 이야기파일 다운로드1
1079정성태7/6/201130025오류 유형: 129. Hyper-V + Realtek 랜카드가 설치된 시스템의 BSOD 현상 [2]
1078정성태7/5/201137544VC++: 52. Chromium 컴파일하는 방법 [2]
1077정성태6/24/201135179.NET Framework: 226. HttpWebRequest 타입의 HaveResponse 속성 이야기파일 다운로드1
1076정성태6/23/201129321오류 유형: 128. SQL Express - User Instance 옵션을 사용한 경우 발생하는 오류 메시지 유형 2가지
1075정성태6/21/201124938VS.NET IDE: 69. 윈폰 프로젝트에서 WCF 서비스 참조할 때 Reference.cs 파일이 비어있는 경우
1074정성태6/20/201125029.NET Framework: 225. 닷넷 네트워크 라이브러리의 트레이스 기능파일 다운로드1
... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...