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.

 

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.

b2ap3_thumbnail_dsmc_error.PNG

 

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.

b2ap3_thumbnail_search_pe.PNG

 

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

 

b2ap3_thumbnail_zuweisungen.PNG

 

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.