Wer viel mit ODS Variablen arbeitet wird sicherlich schon einmal an dem Punkt angekommen sein an dem man sich die Frage stellt wo eine bestimmte Variable überhaupt überall gesetzt wurde. Leider ist dieser Verwendungsort über die DSMC nicht wirklich ersichtlich.
In folgendem Beitrag möchte ich einen Codeschnippsel erläutern, mit dem Sie die Zuweisungen der ODS Variable auslesen können.
In meinem Beispiel möchte ich auf den konkreten Fall „Zuweisung eines Bootenvironment via ODS“ eingehen.
Seit einiger Zeit gibt es in der DSM die Möglichkeit ein Bootenvironment nicht nur hart im Paket zu verdrahten, sondern das PE per ODS Variable an ein Clientobjekt zu hängen und dem PreOS oder OS-Config Paket diese Variable als „BootenvironmentType“ zu übergeben.
Der Vorteil liegt hier auf der Hand.
- Keine unnötigen Revisionen der PreOS und OS-Config Pakete mehr wenn sich etwas am PE geändert hat
- Kein erneutes Revisionieren von kompletten OS-Sets um die geänderten PreOS und OS-Config Pakete zu aktualisieren
- Schnelles Zuweisen von weiteren PEs an einzelne Computerobjekte oder ganze OUs
Allerdings kann es genau hier auch dazu kommen, dass z.B. zu Debug-Zwecken ein PE auf mehrere Einzelclients zugewiesen wird und diese Clients mit der Zeit in Vergessenheit geraten. Versucht man nun das PE zu löschen, wird folgende Meldung ausgegeben.
Um die aktiven Zuweisungen auszulesen wird nun zunächst das zu löschende PE per PowerShell gesucht und in einer Variable $pe gespeichert. Dies können Sie mit dem Befehl „$pe = Get-EmdbSoftwarePackage | where {$_.Name -eq "MEINPE"}“ durchführen.
Um nun die Zuweisungen zu erhalten können Sie folgende Codezeile nutzen:
Get-EmdbVariable -Drive emdb | where { $_.VariableType -eq "ObjectLink" -and $_.Name -like "WinPe*" } | ForEach-Object { $_.GetAssignments() } | where { $_.Value -eq $pe.ID } | Format-Table Name,Value,TargetID,TargetSchemaTag,{$_.GetTarget().Path} –Auto
Erläuterung zur Codezeile:
Es wird hier zunächst nach einer Variable vom Typ „ObjectLink“ gesucht bei der der Name mit „WinPE*“ beginnt. Da es in der DSM mehrere ODS Variablen für die PE-Zuweisung gibt werden nun für jede gefundene Variable alle Zuweisungen rekursiv ausgelesen. Im letzten Step werden alle Zuweisungen ausgegeben bei denen der Wert der Zuweisung gleich der PE ID ist. Per „$_.GetTarget().Path“ wird auch gleich noch der komplette Pfad der Zuweisung ausgegeben.
Wie im Screenshot zu sehen ist wurde das PE fest auf den Computer „BGUSRV-TEST“ zugewiesen.
Nachdem die Zuweisung über die DSMC entfernt wurde kann auch das PE ohne Fehler und Warnungen gelöscht werden.