수색…


비고

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 클래스의 모든 개체 나열

클래스의 모든 인스턴스를 나열 할 수 있습니다.

3.0

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 부분을 ​​사용합니다.

3.0

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 쿼리를 사용하여 인스턴스를 쿼리하고 필터링 할 수 있습니다.

3.0

CIM :

Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'powershell.exe'"

ProcessId Name           HandleCount WorkingSetSize VirtualSize  
--------- ----           ----------- -------------- -----------  
4800      powershell.exe 673         88387584       2199696674816

다른 네임 스페이스의 개체 쿼리 :

3.0

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 )에 사용 가능한 모든 클래스를 나열 할 수 있습니다.

3.0

CIM :

Get-CimClass

WMI :

Get-WmiObject -List

수업 검색

와일드 카드를 사용하여 특정 클래스를 검색 할 수 있습니다. 예 : process 라는 단어가 포함 된 클래스를 찾습니다.

3.0

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 매개 변수를 사용하여 다른 네임 스페이스의 클래스를 나열 할 수 있습니다.

3.0

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의 개체를 쿼리하십시오.

3.0

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"


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow