PowerShell
WMI och CIM
Sök…
Anmärkningar
CIM vs WMI
Från PowerShell 3.0 finns det två sätt att arbeta med managementklasser i PowerShell, WMI och CIM. PowerShell 1.0 och 2.0 stödde endast WMI-modulen som nu ersätts av den nya och förbättrade CIM-modulen. I en senare utgåva av PowerShell kommer WMI-cmdlets att tas bort.
Jämförelse av CIM- och WMI-moduler:
CIM-cmdlet | WMI-cmdlet | Vad den gör |
---|---|---|
Get-CimInstance | Get-WmiObject | Hämtar CIM / WMI-objekt för en klass |
Invoke-CimMethod | Invoke-WmiMethod | Åkallar en CIM / WMI-metod |
Register-CimIndicationEvent | Registret-WmiEvent | Registrerar evenemang för en CIM / WMI-klass |
Ta bort-CimInstance | Ta bort-WmiObject | Ta bort CIM / WMI-objekt |
Set-CimInstance | Set-WmiInstance | Uppdaterar / sparar CIM / WMI-objekt |
Get-CimAssociatedInstance | N / A | Hämta associerade instanser (länkat objekt / klasser) |
Get-CimClass | Get-WmiObject -List | Lista CIM / WMI-klasser |
New-CimInstance | N / A | Skapa nytt CIM-objekt |
Get-CimSession | N / A | Listar CIM-sessioner |
New-CimSession | N / A | Skapa ny CIM-session |
New-CimSessionOption | N / A | Skapar objekt med sessionalternativ; protokoll, kodning, inaktivera kryptering etc. (för användning med New-CimSession ) |
Ta bort-CimSession | N / A | Tar bort / stoppar CIM-sessionen |
Ytterligare resurser
Ska jag använda CIM eller WMI med Windows PowerShell? @ Hej, skriptkille! blogg
Fråga objekt
CIM / WMI används oftast för att fråga information eller konfiguration på en enhet. Av en klass som representerar en konfiguration, process, användare etc. I PowerShell finns det flera sätt att få åtkomst till dessa klasser och instanser, men de vanligaste sätten är att använda Get-CimInstance
(CIM) eller Get-WmiObject
(WMI) cmdlets.
Lista alla objekt för CIM-klass
Du kan lista alla instanser av en klass.
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
Använda ett filter
Du kan använda ett filter för att bara få specifika instanser av en CIM / WMI-klass. Filter skrivs med WQL
(standard) eller CQL (lägg till -QueryDialect CQL
). -Filter
använder WHERE
-delen av en fullständig WQL / CQL-query.
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
....
Använda en WQL-fråga:
Du kan också använda en WQL / CQL-fråga för att fråga och filtrera instanser.
CIM:
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 673 88387584 2199696674816
Fråga objekt i ett annat namnområde:
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
Klasser och namnutrymmen
Det finns många klasser tillgängliga i CIM och WMI som är separerade i flera namnutrymmen. Det vanligaste (och standard) namnutrymmet i Windows är root/cimv2
. För att hitta rätt klass kan det vara användbart att lista alla eller söka.
Lista tillgängliga klasser
Du kan lista alla tillgängliga klasser i standardnamnområdet ( root/cimv2
) på en dator.
CIM:
Get-CimClass
WMI:
Get-WmiObject -List
Sök efter en klass
Du kan söka efter specifika klasser med jokertecken. Ex: Hitta klasser som innehåller 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*"
Lista klasser i ett annat namnområde
Rotnamnsområdet kallas helt enkelt root
. Du kan lista klasser i ett annat namnområde med parametern -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"
Lista tillgängliga namnutrymmen
Om du vill hitta tillgängliga barns namnutrymmen för root
(eller ett annat namnutrymme) frågar du objekten i __NAMESPACE
klass för det namnområdet.
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"