programming ⌨/파워쉘 PowerShell

나를 위한 PowerShell(7) : WMI 클래스 활용

Kortsec1 2024. 3. 18. 20:32

오브젝트에 관한 내용을 모른다면 이해하기 어렵다.

이전 포스트를 보고 오는 것을 추천한다.

2024.03.01 - [programming ⌨/파워쉘 PowerShell] - 나를 위한 PowerShell(6) : Object 다루기

 

나를 위한 PowerShell(6) : Object 다루기

PowerShell은 객체 지향형 모델이다. 객체 지향형 모델은 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 결합으로 이루어진 모델이다. 사용자의 측면에서 아래 "Windows PowerShell in Action"의 저자

kortsec1n4mationm.tistory.com

 

이번 포스팅에서는 WMI(Windows Management Instrumentation)에 대해 알아볼것이다

WMI는 Windows 기반 OS에서의 데이터 관리 및 작업을 위한 인프라다.

Windows의 거의 모든 설정을 접근할 수 있으며, 원격 서버 관리에 중요한 인터페이스 중 하나이기도 하다

 

WMI는 VB스크립트나 윈도우 파워셸과 같은 스크립트 언어들이 Windows 개인용 컴퓨터와 서버들을 로컬/원격으로 관리할 수 있게 해준다.

 

 

 

WMI와 CIM

Img1 _ WMI 실행 모습

 

로컬/원격 컴퓨터에 설치된 소프트웨어 목록을 보는 모습이다.

Get-WmiObject win32_product -ComputerName <???> | Select-Object Name, InstallDate
Get-CimInstance win32_product -ComputerName <???> | Select-Object Name, InstallDate

Img2 _ 로컬 컴퓨터 설치된 소프트웨어 목록

 

CIMOM(CIM Object Manager)에 관해서는 다음 기회에 자세히 다뤄 보도록 하자

지금은 Get-WmiObjectGet-CIMInstance는 동일하다고 생각하면 된다.

 

 

 

Win32_OperatingSystem

가장 널리 사용되는 wmi 쿼리는 win32_operatingsystem과 관련있다.

win32_operatingsystem 클래스는 컴퓨터에 설치된 Windows 기반 운영 체제를 나타낸다

Get-CimInstance win32_operatingsystem

Img3 _ win32_operatingsystem

 

다양한 OS관련 속성들이 존재하는데, 아래 Img4와 같이 사용 가능하다.

Img4 _ win32_operatingsystem의 다양한 속성

 

뿐만 아니라 Reboot, Shutdon, SetDateTime과 같은 메서드또한 존재한다.

 

 

Win32_UserAccount

다른 유용한 wmi instance는 win32_useraccount이다.

이름에서 알 수 있듯이 사용자 계정에 대한 정보가 포함되어 있다.

Get-CimInstance win32_useraccount

Img5 _ win32_useraccount

 

Where-Object를 통해 특정 계정의 정보를 확인할 수 있으며 해당 명령은 다음 포스팅에서 다룰 예정이다.

사용자 계정 이름을 변경하는 Rename 매서드를 포함하고 있다.

Img6 _ 특정 계정의 상세 정보

 

 

Win32_PhysicalMemory

Everest tool을 이용해 본적이 있는가? PC 하드웨어 정보를 분석하는 프로그램이다.

하지만, win32_physicalmemory를 사용한다면 더이상 필요가 없다

Get-WmiObject win32_physicalmemory | Format-Table Manufacturer, Banklabel, Configuredclockspeed, Devicelocator, Capacity, Serialnumber -autosize

Img7 _ win32_physicalmemory

 

운영 체제에서 사용할 수 있는 실제 메모리 디바이스를 나타낸다.

메모리 교체와 같은 상황에서 써먹을 수 있겠다

 

 

 

Win32_ComputerSystem

win32_computersystemwindows를 실행하는 컴퓨터 시스템을 나타낸다.

활용 예시로 컴퓨터 시스템 개체와 연결된 총 프로세스 인스턴스 수를 확인가능하다

Get-CimInstance Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors, NumberOfProcessors

Img8 _ win32_computersystem

 

복잡한 내용이지만, 참고로 NumberOfLogicalProcessors 값이 NumberOfProcessors 값보다 크면 컴퓨터 시스템은 다중 코어 시스템이거나, 하이퍼스레딩에 사용할 수 있는 프로세서가 하나 이상 있다는 뜻이다.

 

 

 

과제

끝마치며 지금까지의 내용을 바탕으로 다음 상황을 해결해 보도록 하자

각자의 하드디스크 에 관한 정보를 가져와보자.
이름, 파티션, 모델, 펌웨어 그리고 시리얼 넘버를 출력시켜 보자
Get-WmiObject, Get-CimInstance 어떤 것이어도 무관하다

 

아래는 해결 과정이다

더보기

1. 클래스 검색

우선 관련된 클래스를 검색해 보자

Get-WmiObject *disk* -list
Img9 _ disk관련 클래스들

이중 Win32_DiskDrive가 눈에 들어온다.

 

2. 속성 검색

Win32_DiskDrive의 속성이 뭐가 있는지 살벼보자

Get-WmiObject win32_diskdrive | Get-Member
Img10 _ win32_diskdrive의 속성

Img10과 같이 우리가 원하는 속성들이 있음을 알 수 있다.

 

3. 결과 수행

Get-CimInstance Win32_DiskDrive | Select-Object FirmwareRevision, Model, Name, Partitions, SerialNumber, Size
Img11 _ 결과 수행

 

 

 

요약


WMI (Windows Management Instrumentation)
Windows 기반 OS에서의 데이터 관리 및 작업을 위한 인프라다

Get-WmiObject, Get-CimInstance를 통해 불러올 수 있으며, 두 명령다 동일한 것으로 간주한다

 

<클래스>
- Win32_OperatingSystem
운영체제에 대한 정보를 포함한다
    InstallDate, LastBootUpTime, SystemDrive, Version, OSType, ...

- Win32_UserAccount
사용자 계정에 대한 정보를 포함한다
    Name, SID, PasswordChangeable, ...

- Win32_PhysicalMemory
PC 하드웨어 정보를 포함한다
    Manufacturer, Banklabel, Configuredclockspeed, ...

- Win32_ComputerSystem
컴퓨터 시스템 정보를 포함한다
    NumberOfLogicalProcessors, NumberOfProcessors, ...


 

참고

 

https://learn.microsoft.com/ko-kr/windows/win32/cimwin32prov/cimwin32-wmi-providers

https://sid-500.com/2018/02/01/powershell-for-beginners-part-9-get-it-all-from-windows-with-powershell-and-wmi/