Bereit, deine PowerShell-Enum-Kenntnisse zu erweitern? Entdecke, wie [Flags()] einfache Enums in leistungsstarke Binärkombinationen umwandelt, sodass du mehrere Einstellungen mit eleganter Präzision verwalten kannst – perfekt für Funktionsflags, Berechtigungssysteme und Konfigurationsverwaltung.
Tobias & Aleksandars Tipp:
Mehr zur Verwendung von Enums
Einfache Enums definieren eine Liste zulässiger Werte, von denen der Benutzer genau einen auswählen kann. Wenn Enums als Flag-Array definiert sind, kann der Benutzer mehr als einen Wert auswählen:
[Flags()]
enum Features
{
BootLog
RealTimeProtection
Firewall
PhysicalAccess
Leash
}
[Features]$myFeatures = 'Firewall', 'Leash'
$myFeatures
Durch das Hinzufügen des Attributs [Flags()] zur Enum erhält jeder Enum-Eintrag nun seinen eigenen eindeutigen Bit-Wert, so dass der Benutzer beliebig viele Enum-Elemente kombinieren kann. Der Typ [Enum] kann hier etwas Licht ins Dunkel bringen. Hier listet er die definierten Enum-Namen auf:
- PS C:\> [Enum]::GetNames([Features])

Als Nächstes werden die zugewiesenen echten numerischen Werte angezeigt:
- PS C:\> [Enum]::GetNames([Features]) | ForEach-Object {
'{0} = {1}' -f $_, ([Features]::$_ -as [int])
}

Wenn du mehrere Werte zuweist, werden Bit-Werte hinzugefügt:
- PS C:\> [Features]$myFeatures = 'Firewall', 'Leash'
PS C:\> $myFeatures
Firewall, Leash
PS C:\> $myFeatures.value__

Es gibt nur ein Problem: Die zugewiesenen Nummern sind fortlaufend und damit mehrdeutig - PhysicalAccess hat die ID 3, aber RealTimeProtection+Firewall zählt auch zu 3.
Wenn du [Flags()] verwendest, müssen den Enum-Elementen auch manuell eindeutige Werte zugewiesen werden:
[Flags()]
enum Features
{
BootLog = 1
RealTimeProtection = 2
Firewall = 4
PhysicalAccess = 8
Leash = 16
}
Jetzt hat jedes Element eine eindeutige ID:
- PS C:\> [Enum]::GetNames([Features]) | ForEach-Object {'{0} = {1}' -f $_,
([Features]::$_ -as [int])}

Nun, mit eindeutigen IDs, kannst du Enums wie jede andere Zahl verwenden, um binäre Arithmetik zu betreiben:
- PS C:\> [Features]'Bootlog,Leash'
BootLog, Leash
PS C:\> [Features]'Bootlog,Leash' -as [int]

Verwende den Operator "+=", um ein Element hinzuzufügen, und "-=", um es zu entfernen:
- PS C:\> [Features]$features = 'Bootlog'
PS C:\> $features += 'Leash'
PS C:\> $features += 'Firewall'
PS C:\> $features
BootLog, Firewall, Leash
PS C:\> $features -= 'Leash'
PS C:\> $features
BootLog, Firewall

Auch um zu prüfen, ob ein bestimmter Wert in einer solchen Liste vorhanden ist, können binäre Operatoren wie -band und -bor verwendet werden:
- PS C:\> $features
BootLog, Firewall
PS C:\> ($features -band 'Firewall') -eq 'Firewall'
True
PS C:\> ($features -band 'Leash') -eq 'Leash'
False

Verwandte Links
- Hier der erste Tipp zur Nutzung von Enums
- ScriptRunner kannst du hier testen
- ScriptRunner: Sicher dir hier deine Demo!