Von Holger Voges auf Dienstag, 04. Juni 2019
Kategorie: Tipp

Mit Powershell prüfen, ob eine Objekteigenschaft vorhanden ist

Kürzlich habe ich mein BCDEdit-Modul wieder angefasst, um einige Funktionen zu überarbeiten. Das Modul erstellt dabei dynamisch Objekte aus dem BCD-Store, indem es per regulärem Ausdruck die Ausgaben von bcdedit.exe einliest, auftrennt und als Objekt zurückgibt.

Dummerweise sind aber nicht alle BCD-Einträge gleich. Einige Eigenschaften werden von BCDedit nur angezeigt, wenn Sie auch tatsächlich gesetzt sind. Um in einer If-Abfrage keine Fehlermeldung zu bekommen, wenn die Eigenschaft gar nicht existiert - die Fehlermeldung kann auch nicht unterdrückt werden, da es sich um einen terminierenden Fehler handlet - muss vorher geprüft werden, ob die Eigenschaft vorhanden ist. Das geht tatsächlich sehr einfach, ist aber gut versteckt. Denn an jedem Objekt hängt ein verstecktes Memberset namens psobject, das nur angezeigt wird, wenn man get-Member mit dem Parameter -force aufruft.

get-childitem C:\Windows | get-member -force

 PSObject beinhaltet Metainformationen über das Object, unter anderem eine Auflistung aller Eigenschaften.

$Folder = Get-Childitem C:\Windows | Get-Member -force
$Folder.psobject.Properties

Die Eigenschaft Name jeder Property entspricht dem Eigenschafsnamen. Um zu prüfen, ob eine Eigenschaft in der Liste enthalten ist, können Sie jetzt einfach den -contains-Operator verwenden:

If ( $folder.PSObject.Properties.Name -contains "Attributes" )
{
  "Die Eigenschaft Attributes existiert"
}

Verwandte Beiträge

Kommentare hinterlassen