Wie gut kennst Du die PowerShell? (Teil 1)

Hier eine kleine Aufgabe, anhand derer man sein PowerShell-Wissen testen kann. Gegeben sei eine kleine Funktion, die einen String, der eine Binärzahl darstellen soll, in eine Zahl konvertiert:

# String in Binärzahl konvertieren
function Convert-StringToBin
{
param([Parameter(ValueFromPipeline=$true)][string]$Zahl)
# Im Begin-Teil steht die Pipeline noch nicht zur Verfügung
begin {  $Summe=0  }
process { $Laenge = $Zahl.Length-1
           $Zahl.ToCharArray() | foreach-object {
           $Summe += [byte]$_*[System.Math]::pow(2,$Laenge)
           $Laenge–}
         }
end { return $Summe }
}

Convert-StringToBin -Zahl 1010
730

Die Parameterdefinition macht bereits vom dem sehr nützlichen Parameter-Attribut und deren ValueFromPipeline-Eigenschaft Gebrauch, so dass die Funktion den Wert für den $Zahl-Parameter auch aus der Pipeline holen kann. Diese Möglichkeit gibt es erst ab Version 2.0. Sie spielt für des Rätsels Lösung aber keine Rolle. Alles ganz simpel, doch aus irgendwelchen Gründen kommt am Ende 730 und nicht 10 heraus. Wer weiß warum?

Die Auflösung folgt in ein paar Tagen.

5 Antworten zu “Wie gut kennst Du die PowerShell? (Teil 1)

  1. Hi, von Charakter aus kriegt man den ASCII Code.
    Damit es intuitiv wird muss man erst nach Sting casten.
    $Summe += [byte][string]$_*[System.Math]::pow(2,$Laenge)

    Nette Aufgabe
    Bernd

  2. Entschuldigung, jetzt hab ich die Lösung verraten. Ich konnte ja nicht ahnen, dass hier unmoderierte Kommentare erlaubt sind.

    • Hallo Bernd,

      Kein Problem (es war ja kein Preisausschreiben;)

      Ich habe einé Weile gebraucht, bis ich den „Fehler“ gefunden hatte,

      Peter

  3. Die Frage ist, was eine Weile ist. Ich habe in guter alter printf Manier solange Ausgaben hinzugefügt, bis die Ausgaben verdächtig nach ASCII Codes aussahen. Dann noch etwas nach geeigneten Konvertern googeln, nichts gefunden und dann fiel der Groschen. Macht wohl auch eine viertel Stunde.

  4. Bei mir war es auch etwa eine viertel Stunde.

    Eine Erfahrung, die ich immer wieder mache ist bei der PowerShell nicht zu sehr wie ein Entwickler zu denken. Deswegen gefällt mir diese Lösung auch nicht zu 100%

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s