Die CIM-Cmdlets
Die neuen CIM-Cmdlets machen grundsätzlich das gleiche wie Get-WmiObject, bringen aber einige Erweiterungen mit, wenn es um den Remotezugriff geht. Bei der Benennung hat Microsoft außerdem versucht, die Cmdlets dem Namensschema für Cmdlets besser anzupassen. Deshalb gibt es unterschied-liche Cmdlets für das Auflisten von Klassen und das Abfragen von Instanzen:
Get-CimClass -ClassName *
Get-CimClass -ClassName Win32*
Das Cmdlet Get-CimClass entspricht in der Funktionalität Get-WmiObject -List. Eine kleine Stolperfalle: Get-CIMClass benötigt immer einen Platzhalter für den Klassennamen, während -List bei Get-Wmi-Object wie ein Switch-Parameter verwendet werden kann.
Um die Instanz einer Klasse abzufragen, verwendet man Get-CimClass:
Get-CimClass -ClassName Win32_Computersystem
Um Klassen remote abzufragen, unterstützt Get-CimClass auch einen Parameter Computername, aber keinen (!) Parameter -Credential, so dass ein Wechsel des Benutzerkontextes nicht möglich ist. Das wirkt auf den ersten Blick verwirrend, aber es gibt eine bessere Alternative. Mit Hilfe des Cmdlets New-CimSession kann man nämlich eine Remotesitzung aufbauen, und dann alle Abfragen durch dieselbe Verbindung schicken:
$cred = Get-Credential
$CimSession = New-CimSession -Credential $cred -ComputerName DC1
Get-CimClass -ClassName Win32_Computersystem -CimSession $CimSession
Get-CimClass -ClassName Win32_Operatingsystem -CimSession $CimSession
Get-CimClass -ClassName Win32_Bios -CimSession $CimSession
$CimSession.Close()
New-CimSession führt jetzt nur eine Authentifizierung gegen den Zielcomputer aus, und Get-CimClass verwendet für jede Abfrage dieselbe Netzwerksitzung. Denken Sie aber daran, die Sitzung wieder zu beenden, nachdem Sie alle Daten eingesammelt haben. Das geht mit der Close()-Methode des Sitzungs-objekts, oder einfach mit Remove-CimSession:
Get-CimSession | Remove-CimSession
Get-WmiObject und die neuen Cim-Cmdlets unterscheiden sich auch darin, wie sie Daten remote abfragen. Während Get-WmiObject immer DCOM (Distributed COM) für die Remoteverbindung benutzt, verwendet New-CimSession standardmäßig Powershell Remoting. Powershell Remoting ist nicht nur sicherer als DCOM, weil es eine Authentifizierung standardmäßig nur mit Kerberos erlaubt, es verwendet auch nur einen Port für den Datenaustausch. DCOM benötigt dagegen TCP-Port 135 und handelt dann eine Reihe von hohen Ports für die RPC-Verbindung aus.
Die CIM-Session kann mit CIM-Sitzungsoptionen weiter konfiguriert. Um ein Sitzungsoptions-Objekt zu erzeugen, steht New-CimSessionOption zur Verfügung. Damit kann man New-CimSession auch dazu zwingen, die Verbindung mit DCOM auszuführen:
$cred = Get-Credential
$CimOpt = New-CimSessionOption -Protocol Dcom
$CimSes = New-CimSession -Credential $cred -ComputerName DC1 -SessionOption $CimOpt
Get-CimClass -ClassName Win32_Computersystem -CimSession $CimSes
$CimSession.Close()
Mehr zu DCOM-Ports finden Sie unter Service overview and network port requirements for Windows.
$cred = Get-Credential
$CimSession = New-CimSession -Credential $cred -ComputerName DC1 Get-CimClass -ClassName Win32_Computersystem -CimSession $CimSession
Get-CimClass -ClassName Win32_Operatingsystem -CimSession $CimSession
Get-CimClass -ClassName Win32_Bios -CimSession $CimSession
$CimSession.Close()