Bit-Operatoren in PowerShell: -band, -bor, -bxor, -bnot, -shl, -shr


    Tags:

    Bit-Operatoren in PowerShellPowerShell bietet mehrere Operatoren, um binäre Zahlen auf Bit-Ebene zu manipulieren. Dazu ge­hören neben einem UND- sowie einem ODER-Operator auch solche für ein exklusives ODER sowie für die Negation. Hinzu kommen zwei Shift-Operatoren, welche die Bits um eine bestimmte Anzahl an Stellen nach links oder rechts verschieben.

    Grundsätzlich stellt sich die Frage, wieso eine Script-Sprache, die hauptsächlich der Automation in der System­verwaltung dient, Operatoren auf Bit-Ebene benötigt.

    In der Praxis gibt es aber tatsächlich immer wieder derartige Anwendungen, etwa wenn die einzelnen Bits eines Werts als Flags für bestimmte Einstellungen fungieren.

    Ein Beispiel dafür sind die Attribute im Active Directory für den Kerberos-Verschlüsselungstyp oder UserAccountControl für wichtige Konto-Einstellungen. Letzteres zeigt beispielweise an, ob ein Account deaktiviert ist, wenn das zweite Bit gesetzt ist (entspricht einem Wert von binär 00000010).

    Bitweises UND (-band)

    Verknüpft man den Wert des Attributs über ein Bit-weises UND mit 2, dann ist das Ergebnis nur dann wahr, wenn das zweite Bit gesetzt ist, also das Konto deaktiviert wurde.

    Angenommen, der Wert von UserAccountControl für ein Konto ist 514, dann weist es der folgende Befehl als deaktiviert aus:

    Get-ADUser -Filter * -Properties UserAccountControl |
    Where { $_.UserAccountControl -band 0B00000010} | Select name

    Das führende "0B" kennzeichnet die Zahl als binär. Das Ergebnis der Operation ist 2 und somit "wahr", weil die zweite Stelle von rechts in beiden Zahlen 1 ist. Verknüpft man sie über ein UND, dann bleibt dort die 1 erhalten.

    Binäre Zahlen lassen sich in PowerShell 7 als Operanden einsetzen, nicht jedoch in Windows PowerShell.

    Gibt man obigen Ausdruck jedoch in Windows PowerShell ein, dann erhält man eine Fehlermeldung. Im Unterschied zu PowerShell 7 kann man dort Binärzahlen so nicht verwenden. Man nutzt stattdessen Dezimal- oder Hexadezimal­zahlen, die Operationen erfolgen aber dennoch auf Bit-Ebene.

    Bitweises ODER (-bor und -bxor)

    Ersetzt man in der obigen Operation das UND durch ein ODER, dann erhält man den Ausgangswert 514, weil das zweite Bit jeweils 1 und das Ergebnis somit 1 ist. Beim zehnten Bit werden eine 1 und ein 0 verknüpft, was wieder 1 ergibt:

    0B001000000010

    -bor

    0B000000000010

    ergibt

    0B001000000010

    Bitweises OR und XOR, mit optionaler Konvertierung des Ergebnisses in eine Binärzahl

    XOR daegen ist immer dann wahr, wenn die beiden Operanden unterschiedlich sind, das heißt wenn das eine Bit 1 ist und die andere 0 ist. Wenn beide gleich sind, ist das Ergebnis von XOR "falsch".

    Die Wahrheitstabelle von XOR sieht so aus:

    Eingabe 1 Eingabe 2 Ergebnis
    Falsch Falsch Falsch
    Falsch Wahr Wahr
    Wahr Falsch Wahr
    Wahr Wahr Falsch

    Die folgende Operation zeigt die binäre Repräsentation von 514 und 2. Bis auf das vorderste sind alle Bits der beiden Zahlen gleich, so dass diese auf 0 auswerten. Nur das vorderste bleibt auf 1, weil seinen Gegenspieler 0 ist:

    1 0 0 0 0 0 0 0 1 0
    -bxor
    0 0 0 0 0 0 0 0 1 0
    ergibt
    1 0 0 0 0 0 0 0 0 0

    Negation

    Für die binäre Negation verwendet man den unären Operator -BNOT. Er dreht einfach alle Werte der jeweiligen Bits um, aus 1 wird 0 und aus 0 wird 1. Das Ergebnis von

    -bnot 0B10000010

    ist daher

    0B01111101

    Bitweise Negation mit -BNOT

    Bits verschieben

    PowerShell verfügt auch über Shift-Operatoren, um die Bits einer Binärzahl um beliebige Stellen nach links oder rechts zu verschieben. Der Aufruf

    0B1000010 -shr 3

    ergibt

    0B0001000

    Das zweite Bit von rechts fällt beim Verschieben um 3 Stellen nach rechts quasi hinten runter, und das linke Bit wandert bis zur vierten Stelle von rechts.

    Bits einer Binärzahl um zwei Stellen nach links und nach rechts verschieben

    Der Operator -shl bewirkt das Gegenteil, durch das Verschieben nach links erhöht sich der Stellenwert der gesetzten Bits.

    Zusammenfassung

    PowerShell verfügt über einen vollständigen Satz von Bit-Operatoren aus -band, -bor, -bxor und -bnot. Hinzu kommen die beiden Shift-Operatoren zum Verschieben der Bits um beliebig viele Stellen nach links und rechts.

    Wenn man direkt mit binären Zahlen hantieren möchte, dann benötigt man dafür PowerShell 7. Windows PowerShell unterstützt dies nicht.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links