PowerShell
WMI 및 CIM
수색…
비고
CIM과 WMI 비교
PowerShell 3.0부터 PowerShell, WMI 및 CIM에서 관리 클래스로 작업하는 두 가지 방법이 있습니다. PowerShell 1.0 및 2.0은 새롭고 향상된 CIM 모듈에 의해 현재 우위에있는 WMI 모듈 만 지원했습니다. PowerShell의 이후 릴리스에서는 WMI-cmdlet이 제거됩니다.
CIM 및 WMI 모듈 비교 :
CIM-cmdlet | WMI-cmdlet | 그것이하는 일 |
---|---|---|
Get-CimInstance | Get-WmiObject | 클래스에 대한 CIM / WMI- 개체 가져 오기 |
Invoke-CimMethod | Invoke-WmiMethod | CIM / WMI 클래스 메서드 호출 |
Register-CimIndicationEvent | 등록 - WmiEvent | CIM / WMI 클래스에 대한 이벤트 등록 |
Remove-CimInstance | WmiObject 제거 | CIM / WMI- 개체 제거 |
Set-CimInstance | Set-WmiInstance | CIM / WMI 개체 업데이트 / 저장 |
Get-CimAssociatedInstance | N / A | 관련 인스턴스 가져 오기 (링크 된 객체 / 클래스) |
Get-CimClass | Get-WmiObject -List | 목록 CIM / WMI 클래스 |
New-CimInstance | N / A | 새 CIM 객체 만들기 |
Get-CimSession | N / A | CIM 세션 목록 표시 |
New-CimSession | N / A | 새 CIM 세션 만들기 |
New-CimSessionOption | N / A | 세션 옵션을 사용하여 객체를 만듭니다. 프로토콜, 인코딩, 암호화 해제 등 ( New-CimSession 과 함께 사용) |
Remove-CimSession | N / A | CIM 세션을 제거 / 중지합니다. |
추가 리소스
Windows PowerShell에서 CIM 또는 WMI를 사용해야합니까? @ Hey, Scripting Guy! 블로그
개체 쿼리
CIM / WMI는 장치의 정보 또는 구성을 쿼리하는 데 가장 일반적으로 사용됩니다. 구성, 프로세스, 사용자 등을 나타내는 클래스입니다. PowerShell에는 이러한 클래스와 인스턴스에 액세스하는 여러 가지 방법이 있지만 가장 일반적인 방법은 Get-CimInstance
(CIM) 또는 Get-WmiObject
(WMI) cmdlet을 사용하는 것입니다.
CIM 클래스의 모든 개체 나열
클래스의 모든 인스턴스를 나열 할 수 있습니다.
CIM :
> Get-CimInstance -ClassName Win32_Process
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
0 System Idle Process 0 4096 65536
4 System 1459 32768 3563520
480 Secure System 0 3731456 0
484 smss.exe 52 372736 2199029891072
....
....
WMI :
Get-WmiObject -Class Win32_Process
필터 사용
필터를 적용하여 CIM / WMI 클래스의 특정 인스턴스 만 가져올 수 있습니다. 필터는 WQL
(기본값) 또는 CQL (Add -QueryDialect CQL
)을 사용하여 작성됩니다. -Filter
는 전체 WQL / CQL 쿼리의 WHERE
부분을 사용합니다.
CIM :
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 676 88305664 2199697199104
WMI :
Get-WmiObject -Class Win32_Process -Filter "Name = 'powershell.exe'"
...
Caption : powershell.exe
CommandLine : "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
CreationClassName : Win32_Process
CreationDate : 20160913184324.393887+120
CSCreationClassName : Win32_ComputerSystem
CSName : STACKOVERFLOW-PC
Description : powershell.exe
ExecutablePath : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
ExecutionState :
Handle : 4800
HandleCount : 673
....
WQL 쿼리 사용 :
또한 WQL / CQL 쿼리를 사용하여 인스턴스를 쿼리하고 필터링 할 수 있습니다.
CIM :
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 673 88387584 2199696674816
다른 네임 스페이스의 개체 쿼리 :
CIM :
> Get-CimInstance -Namespace "root/SecurityCenter2" -ClassName AntiVirusProduct
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 397568
timestamp : Fri, 09 Sep 2016 21:26:41 GMT
PSComputerName :
WMI :
> Get-WmiObject -Namespace "root\SecurityCenter2" -Class AntiVirusProduct
__GENUS : 2
__CLASS : AntiVirusProduct
__SUPERCLASS :
__DYNASTY : AntiVirusProduct
__RELPATH : AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
__PROPERTY_COUNT : 6
__DERIVATION : {}
__SERVER : STACKOVERFLOW-PC
__NAMESPACE : ROOT\SecurityCenter2
__PATH : \\STACKOVERFLOW-PC\ROOT\SecurityCenter2:AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 397568
timestamp : Fri, 09 Sep 2016 21:26:41 GMT
PSComputerName : STACKOVERFLOW-PC
클래스와 네임 스페이스
CIM과 WMI에는 여러 개의 네임 스페이스로 분리 된 여러 클래스가 있습니다. Windows에서 가장 일반적인 (및 기본) 네임 스페이스는 root/cimv2
입니다. righ 클래스를 찾으려면 all 또는 search를 나열하는 것이 유용 할 수 있습니다.
사용 가능한 클래스 목록
컴퓨터의 기본 네임 스페이스 ( root/cimv2
)에 사용 가능한 모든 클래스를 나열 할 수 있습니다.
CIM :
Get-CimClass
WMI :
Get-WmiObject -List
수업 검색
와일드 카드를 사용하여 특정 클래스를 검색 할 수 있습니다. 예 : process
라는 단어가 포함 된 클래스를 찾습니다.
CIM :
> Get-CimClass -ClassName "*Process*"
NameSpace: ROOT/CIMV2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
Win32_ProcessTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
Win32_ProcessStartTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
Win32_ProcessStopTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
CIM_Process {} {Caption, Description, InstallDate, Name...}
Win32_Process {Create, Terminat... {Caption, Description, InstallDate, Name...}
CIM_Processor {SetPowerState, R... {Caption, Description, InstallDate, Name...}
Win32_Processor {SetPowerState, R... {Caption, Description, InstallDate, Name...}
...
WMI :
Get-WmiObject -List -Class "*Process*"
다른 네임 스페이스의 클래스 나열
루트 네임 스페이스는 단순히 root
라고 root
. -NameSpace
매개 변수를 사용하여 다른 네임 스페이스의 클래스를 나열 할 수 있습니다.
CIM :
> Get-CimClass -Namespace "root/SecurityCenter2"
NameSpace: ROOT/SecurityCenter2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
....
AntiSpywareProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
AntiVirusProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
FirewallProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
WMI :
Get-WmiObject -Class "__Namespace" -Namespace "root"
사용 가능한 네임 스페이스 나열
root
(또는 다른 네임 스페이스)의 사용 가능한 하위 네임 스페이스를 찾으려면 해당 네임 스페이스에 대한 __NAMESPACE
-class의 개체를 쿼리하십시오.
CIM :
> Get-CimInstance -Namespace "root" -ClassName "__Namespace"
Name PSComputerName
---- --------------
subscription
DEFAULT
CIMV2
msdtc
Cli
SECURITY
HyperVCluster
SecurityCenter2
RSOP
PEH
StandardCimv2
WMI
directory
Policy
virtualization
Interop
Hardware
ServiceModel
SecurityCenter
Microsoft
aspnet
Appv
WMI :
Get-WmiObject -List -Namespace "root"