Arbeiten mit Policies

Neben der Verwaltung von Objekten des Organisations-Verzeichnisses, ist das Arbeiten mit Policies, Policy-Instanzen und die Auswertung deren Stati ein Haupt-Einsatzgebiet der PowerShell Extensions for Ivanti DSM.


Policies anlegen

Um eine neue Policy anzulegen, wird das Cmdlet New-EmdbPolicy verwendet. Dabei ist es unerheblich, ob es sich um eine Pilotinstallation handelt (also das zuzuweisende Paket noch nicht freigegeben ist), oder eine "normale" Policy angelegt wird. Aus Sicht der SOAP-Schnittstelle besteht kein Unterschied zwischen Pilotinstallationen und normalen Policies - dieser ist lediglich in der DSM Console vorhanden.


Eine Policy stellt eine Assoziation zwischen einem Software-Paket und dem beziehungsweise den Zuweisungszielen (beispielsweise einer oder mehreren Gruppen oder Objekten) dar. Daher kann eine Policy als Eigenschaft eines Software-Pakets (die Software wird einem Ziel zugewiesen) oder von Objekten des Organisations-Verzeichnisses (Objekten wird ein Paket zugewiesen) abgebildet werden.


Das folgende Beispiel erzeugt eine Software-Policy auf der statischen Computergruppe "Laptops Rom" für das Paket "Adobe Reader 9.0".


$MyTargetpath = "emdb:\rootDSE\Managed Users & Computers\Rom\Laptops Rom"

$MyPackagename = "emdb:\rootDSE\Global Software Library\Application Library\Adobe\Adobe Reader\Adobe Reader 9.0"

New-EmdbPolicy -TargetObject $MyTargetpath -AssignedObject $MyPackagename -PolicyType "SwPolicy"


Tipp: Die möglichen Werte für den Parameter PolicyType können über den Aufruf der Methode GetPolicyTypeNames() für ein Objekt vom Typ EmdbSoftwarePackage ermittelt werden.


Beachten Sie im obigen Beispiel, dass für "MyTargetpath" und "MyPackagename" lediglich Strings, also die Namen der jeweiligen Objekte, angegeben werden und nicht die Objekte selbst. Dies stellt eine Vereinfachung, die Ihrer Bequemlichkeit und der intuitiven Bedienung dient, dar. Selbstverständlich können Sie auch die Objekte selbst angeben, was dann folgendermaßen aussehen würde:


$MyTarget = Get-EmdbGroup "emdb:\rootDSE\Managed Users & Computers\Rom\Laptops Rom"

$MyPackage = Get-EmdbSoftwarePackage "emdb:\rootDSE\Global Software Library\Application Library\Adobe\Adobe Reader\Adobe Reader 9.0"

New-EmdbPolicy -TargetObject $MyTarget -AssignedObject $MyPackage -PolicyType "SwPolicy"


Policies ermitteln

Um zu ermitteln, welche Policies einem Objekt zugewiesen sind, steht Ihnen das Cmdlet Get-EmdbPolicy zur Verfügung. Dieses Cmdlet benötigt die Information, für welches Objekt Sie die Policies ermitteln wollen und optional den zurückzugebenden Policy-Typ. Im folgenden Beispiel werden also alle Software-Policies der Gruppe "Laptops Rom" ermittelt:


Get-EmdbPolicy "emdb:\rootDSE\Managed Users & Computers\Rom\Laptops Rom" -PolicyType "SwPolicy"


Das Ergebnis des obigen Befehls ist ein Array aus Policy-Objekten, das alle Policies für das Ziel enthält. Da jedoch Policy-Objekte nicht den Namen des zugeordneten Software-Pakets enthalten, sondern lediglich dessen ID, müssen Sie sich zusätzlich den Wert der Eigenschaften AssignedObjectName beziehungsweise TargetObjectName ausgeben lassen. Das folgende Beispiel ist also deutlich besser zu lesen, wobei diesmal alle Policies und daher zusätzlich der Typ der Policy, der in der Eigenschaft SchemaTag eines Policy-Objekts gespeichert ist, ausgegeben werden:


Get-EmdbPolicy "emdb:\rootDSE\Managed Users & Computers\Rom\Laptops Rom" | Format-Table "AssignedObjectName", "SchemaTag"


Hinweis: Wenn Sie sich den Namen des zugewiesenen Pakets oder die Namen der Policy-Ziele ausgeben lassen, wird ein zusätzlicher Zugriff auf die DSMDB benötigt, was die Ausführung des Befehls verzögern kann. Lassen Sie sich diese Eigenschaften daher nur ausgeben, wenn Sie diese auch benötigen.


Beachten Sie außerdem, dass Sie mit dem obigen Kommando Policies ermittelt haben und keine Policy-Instanzen. Wenn Sie also Get-EmdbPolicy zum Beispiel auf ein einzelnes Computer-Objekt anwenden, werden Sie nur die Policies erhalten, die dem Computer direkt zugewiesen sind. Es werden keine Informationen darüber ermittelt, welche Zuweisungen das Objekt über Gruppenmitgliedschaften oder Zuweisungen auf übergeordneten Strukturobjekten geerbt hat. Das Verwalten von Policy-Instanzen besprechen wir später in diesem Kapitel.


Policies löschen

Möchten Sie eine Policy löschen, so verwenden Sie dazu das Cmdlet Remove-EmdbPolicy oder alternativ die Methode Delete() eines Policy-Objekts. Sie benötigen  zunächst eine Variable, die das gesuchte Policy-Objekt enthält. Im obigen Beispiel haben Sie gesehen, wie Sie alle Policies eines Objektes ermitteln können. Wenn Sie nun eine bestimmte Policy löschen möchten, so soll die Identifikation in der Regel wohl auch über den Namen des zugehörigen Software-Pakets erfolgen.


Get-EmdbPolicy "emdb:\rootDSE\Managed Users & Computers\Rom\Laptops Rom" | Where-Object {$_.AssignedObjectName -eq "Adobe Reader 9.0"} | Remove-EmdbPolicy


Bei diesem Aufruf wird die Policy - wie in der DSMC - so "gelöscht", dass versucht wird, das entsprechende Paket zu deinstallieren. Möchten Sie das Löschen der Policy erzwingen, so verwenden Sie das Cmdlet folgendermaßen:


Remove-EmdbPolicy -force


 Das folgende Beispiel veranschaulicht das Löschen der Policy über die Verwendung der Delete()-Methode:


Get-EmdbPolicy "emdb:\rootDSE\Managed Users & Computers\Rom\Laptops Rom" | Where-Object {$_.AssignedObjectName -eq "Adobe Reader 9.0"} | ForEach-Object {$_.Delete()}


Auch bei der Delete()-Methode muss, um das Löschen der Policy zu erzwingen, die Methode folgendermaßen angewandt werden:


.Delete($True)


Mit Policy-Instanzen arbeiten

Häufig werden Sie weniger die Software-Policies, also die Regeln zur Zuweisung von Software-Paketen, interessieren, sondern vielmehr die Policy-Instanzen, also die konkreten Ausprägungen der Regeln. Nur Policy-Instanzen haben einen Compliance-Status und nur über diese Instanzen können Sie also ermitteln, ob Software-Installationen anstehen, ob diese bereits durchgeführt wurden und ob die Ausführung erfolgreich war.


Das folgende Beispiel ermittelt für den Computer XP99 alle Policy-Instanzen und gibt diese im PowerShell-Konsolenfenster aus:


Get-EmdbComputer "XP99" | Get-EmdbPolicyInstance


Auch hier werden - wie bei der Ermittlung von Policies - zunächst nur einige IDs und der Compliance-Status der Policy-Instanz ausgegeben. Die IDs sind: die ID der Policy-Instanz selbst, die ID des zugewiesenen Software-Pakets und die ID des Ziel-Objekts. Da diese IDs zunächst für einen Betrachter wenig aussagekräftig sind, können Sie - auch wieder über den "Preis" einer zusätzlichen Anfrage an die DSMDB - die Namen der zugehörigen Objekte ausgeben lassen:


Get-EmdbComputer "XP99" | Get-EmdbPolicyInstance | Format-Table "AssignedObjectName", "ComplianceState"


In diesem Beispiel wurde die Ausgabe der Eigenschaft TargetObjectName bewusst weggelassen, da Sie ja die Policy-Instanzen des Computers "XP99" angefordert haben und daher der TargetObjectName stets den Wert "XP99" besessen hätte.


Da es sich bei Policy-Instanzen ja um vom DSM 2019.1 Business Logic Server berechnete Objekte handelt, gibt es - wie in der DSMC auch - auch über die PowerShell Extensions for Ivanti DSM keine Möglichkeit, einzelne Policy-Instanzen zu erzeugen oder zu löschen. Daher existieren auch keine Cmdlets oder Methoden an den Policy-Instanz-Objekten, um solche Aufgaben auszuführen.


Software-Pakete reinstallieren - Policy-Instanzen erneut ausführen

ACHTUNG: Seit DSM 2015.2 muss diese Aufgabe auf andere Art und Weise ausgeführt werden. Siehe auch Alternativen für diverse Funktionalitäten in DSM 2015.2


Ein häufig in der Praxis anzuwendendes Szenario ist die Reinstallation einer Software auf einem bestimmten System - übertragen auf die DSMC also die Ausführung der Aufgabe "Neu Installieren" einer bestehenden Policy-Instanz. Um diese Anforderung über die PowerShell umzusetzen, müssen Sie entweder die Reinstall()-Methode einer Policy-Instanz aufrufen, oder die Eigenschaft ReinstallRequestNumber wird um 1 erhöht und die Änderungen gespeichert. Dies lässt sich für die Policy-Instanz für das Paket "Adobe Reader 9.0" folgendermaßen umsetzen:


$MyComputer = Get-EmdbComputer "XP99"

$MyPolicyInstance = $MyComputer | Get-EmdbPolicyInstance | Where-Object {$_.AssignedObjectName -eq "Adobe Reader 9.0"}

$MyPolicyInstance.Reinstall()


Natürlich lassen sich auch die anderen Aufgaben, wie etwa das aktiv/inaktiv setzen einer Policy-Instanz oder das Reparieren einer Installation realisieren. Ebenfalls möglich - aber über den Umfang dieser ersten Schritte hinausgehend - ist die Verwaltung von Installationsparametern. Dies ist Inhalt eines Abschnitts unter Fortgeschrittene Themen.