Mit Filtern arbeiten

Viele Cmdlets erlauben über den Parameter -filter die Angabe eines Filterkriteriums, über den die Anzahl der zurückgegebenen Objekte eingeschränkt werden kann. In der Regel ist dies auch eine durchaus sinnvolle Vorgehensweise und beispielsweise deutlich performanter, als die Objekte erst durch ein nachfolgendes Where-Object Cmdlet aus der Pipeline herauszufiltern.


Die Ursache für die bessere Performance des Filter-Parameters liegt darin, dass das Filterkriterium direkt an den Server zu Ermittlung der zurückzuliefernden Objekte geschickt wird, das heißt, die Filterung bereits auf dem Server stattfindet. Wird dagegen die Auswahl der Objekte erst über ein Where-Object Cmdlet getroffen, so müssen im ersten Schritt vom Server alle in Frage kommenden Objekte ermittelt und diese an den anfragenden Client geschickt werden, der diese dann im zweiten Schritt aus der Pipeline herausfiltert. Wenn es sich daher um eine sehr große Menge von Objekten handelt, die ohne Filterung zurückgegeben werden müssen und davon ein Großteil wieder herausgefiltert werden soll, so ist es sehr zu empfehlen, diese Filterung bereits auf dem Server ausführen zu lassen.


Im Kontext der PowerShell Extensions for Ivanti DSM bedeutet dies, dass im Filter-Parameter ein LDAP-Filter angegeben werden muss. Sie kennen diese Filter sicherlich bereits aus der DSMC, wo Sie im Bereich des Objektfensters über den Button "Filter anlegen" die angezeigten Objekte filtern können.


Um zum Beispiel in der Ansicht "Manage Computer & Benutzer" nur Computer-Objekte anzeigen zu lassen, die im Bereich der Basis-Inventarisierung im Feld "Hersteller" einen Wert eingetragen haben, aktivieren Sie das Kontrollkästchen "Untergeordnete Objekte" und verwenden Sie folgende LDAP-Filter:


(&(!(BasicInventory.Vendor:IsNull=))(SchemaTag=Computer))


Sie müssen nun, um ein Filterkriterium zu entwickeln und dann in Ihren PowerShell-Scripts anzuwenden, nicht die gesamte Syntax von LDAP-Queries verstehen und erlernen. Mit dem LDAP-Filter Editor aus der DSMC steht Ihnen ein leistungsfähiges Werkzeug zur Verfügung, mit dem Sie Ihre Filterkriterien über eine grafische Oberfläche zusammenstellen können. Wenn Sie den Filter Editor dann schließen, klicken Sie einmal mit der Maus in das Feld "Free LDAP", sodass der LDAP-Filterstring vollständig angezeigt wird und kopieren diesen aus dem Feld heraus.




Tipp: Der LDAP-Filter Editor liefert in der Regel das Filter-Kriterium "objectClass". Aus Gründen der Konsistenz wird in dieser Hilfe durchgängig das Kriterium "SchemaTag" verwendet. Beide Filter-Schlüsselwörter sind im Zusammenhang mit der DSM 2017 SOAP-Schnittstelle äquivalent.


Anschließend können Sie diesen ohne Änderung in den Filter-Parameter der Cmdlets einfügen, die dies unterstützen. Das oben genannte Beispiel würde als PowerShell-Befehl also folgendermaßen aussehen:


Get-ChildItem -Recurse -Filter "(&(!(BasicInventory.Vendor:IsNull=))(SchemaTag=Computer))"


Bei Verwendung der objekttypspezifischen Get-Cmdlets wie Get-EmdbComputer, Get-EmdbSoftwarePackage etc. ist die Angabe der Objektklasse dann natürlich nicht erforderlich, sodass sich dieses Beispiel auch so darstellen lässt:


Get-EmdbComputer -Recurse -Filter "!(BasicInventory.Vendor:IsNull=)"