PowerShell

Mitgliedschaften eines Devices in SCCM Collections mittels WMI und PowerShell eruieren

Mitgliedschaften eines Devices in SCCM Collections mittels WMI und PowerShell eruieren

Die seit SCCM 2012 integrierten PowerShell Module erlauben die Abfrage von vielen Parametern auf eine sehr einfache Weise. Es existieren jedoch verschiedenste Gründe einige Abfragen mittels WMI durchzuführen. Gründe hierfür können beispielsweise sein:

  • Das System, von dem aus abgefragt wird, ist ein 32-Bit System (Installation des SCCM PowerShell Moduls ist nur auf 64-Bit Systemen vorgesehen)
  • Das SCCM PowerShell Modul ist nicht installiert
  • Die abzufragenden Werte lassen sich nicht ohne Weiteres mit den PowerShell CmdLets ermitteln

Unserer Erfahrung nach sind WMI-Abfragen häufig auch effizienter was Abfragezeiten anbelangen. Die hier aufgezeigten WMI-Abfragen sind sowohl für SCCM 2007 als auch für SCCM 2012 gültig. Die folgenden Codezeilen ermitteln die Collection-Mitgliedschaften eines Devices. Als Suchparameter dient hier der Name eines solchen.

Im ersten Schritt müssen einige Werte wie das zu suchende Gerät, SCCM Server und SiteCode angegeben werden:

$SiteCode = "COD"
$SCCMServer = "SERVERNAME"
$FindMe = "DEVICE"

Im folgenden Schritt werden dann die tatsächlichen WMI-Abfragen ausgefüht. Zuerst wird die ResourceID des zu suchenden Gerät ermittelt, dann die Collections, denen das Gerät zugeordnet ist. Abschliessend wird eine Liste mit allen Collection-Namen und IDs erstellt, die uns die Namen für die zu suchenden Collections liefert:

# Query ResourceID
$ResourceID = (Get-WmiObject -ComputerName $SCCMServer -Namespace "Root\SMS\Site_$SiteCode" -Class SMS_R_SYSTEM -Filter "Name='$FindMe'").ResourceId
# Get relevant collections
$RelevantCollectionIDs = (Get-WmiObject -ComputerName $SCCMServer -Namespace "Root\SMS\Site_$SiteCode" -Class SMS_Fullcollectionmembership -Filter "ResourceID = '$ResourceID'").CollectionID
# Find all collections
$AllCollections = Get-WmiObject -ComputerName $SCCMServer -Namespace "Root\SMS\Site_$SiteCode" -Class 'SMS_Collection' | Select Name, CollectionID

Im letzten Schritt werden die IDs und die Namen für die gefundenen Collections in einen Hashtable geschrieben:

# Hashtable
$Result = @{}
Foreach ($CollectionID in $RelevantCollectionIDs)
 {
 # Check Name for each relevant collection
 $CollectionName = $AllCollections | Where-Object {$_.CollectionID -eq $CollectionID} | Select Name -ExpandProperty Name
 # Add to hashtable
 $Result.Add("$CollectionID","$CollectionName")
 }
# Return result
Return $Result

Als Ergebnis erhält man nun die Collection Namen samt ID in denen DEVICE Mitglied ist. Die Bildschrimausgabe sollte folgendermassen aussehen:

List_Device_Collections_edited

Viellfach kann es hilfreich sein, wenn einem eine einfache Möglichkeit zur Verfügung steht, die Collections für ein Device anzeigt, da oftmals Software und OS Deployments auf Collection-Ebene angewendet werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.