Skip to the main content.

PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting

Mit [Flags()] zum Erfolg: PowerShell-Enums leicht gemacht

Tipp:

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

     

 

 

Good2know


Was für ein gelungener Scriptember! Danke, Community!

Wir hatten viele tolle Gespräche im Scriptember, glückliche Gewinner bei den diversen Challenges und sagen Danke, ihr seid die Besten!   

 

Scriptember - hier ist die Übersicht

 

  • Folge uns in den sozialen Medien, suchen und verwenden Sie die Hashtags #Scriptember und #PowerShell.

 

 

Verwandte Links 



Zusammenhängende Posts

4 min read

Objekte in PowerShell: So bringst du Struktur in deine Skripte

Schluss mit unübersichtlichem Code! Entdecke, wie du in PowerShell Objekte erstellst, geordnete Hash-Tabellen nutzt und...

5 min read

PowerShell-Skripte zur Validierung und Transformation von Daten

Du hast genug von versteckten Fehlern in PowerShell-Skripten? Entdecke, wie Validierungs- und Transformationsattribute...

4 min read

Setze auf die PowerShell-Pipeline

Du willst deine PowerShell-Skripte schneller und flexibler gestalten? Erfahre hier, wie du die Pipeline mit...

Über den Autor: