none
Bug in PowerShell ISE RRS feed

  • Frage

  • Hallo,

    wenn man PowerShell 3.0 auf einem deutschen W7-Rechner installiert hat, habt ihr das Problem wahrscheinlich schon beobachtet:

    Wenn man z.B. auf der Powershell ISE einen Befehl abschickt z.B. ping, werden die Sonderzeichen, Umlaute, etc. fehlerhaft angzeigt.

    Bei der 'normalen' Powershell werden die Zeichen korrekt angezeigt.  

      

    Das eigentliche Problem entsteht dann, wenn ein umfangreiches Skript entwicken möchte und z.B. die regulären Ausdrücken testen wollen.

    Hat jemand das Problem schon gelöst? Liegt es an einer Konfiguration, oder ist das wirklich ein Bug in der Powershell ISE.

    Vielen Dank im Vornhinein
    Guy Jascht

        

    Dienstag, 4. Dezember 2012 09:41

Antworten

  • Vielen Dank für die schnelle Antwort! 

    Die Erläuterung zu den Problemen von Codepages beschreibt knapp und präzise mir was hier passieren kann, allerdings es liegt hier etwas anders. Ich habe auch nur Ping als Beispiel verwendet um zu demonstrieren das es in der PowerShell alleine und in der Shell in der PowerShell ISE Unterschiede gibt. Und das Problem entsteht eben nicht nur wenn DOS-Befehle sondern auch bei gewissen MS Cmdlets.

    Ich bin überhaupt darauf gestossen bin, wie ich einer meiner Modul auf PowerShell 3.0 umstellen möchte . Das Problem tritt/trat in PowerShell 2.0 nicht auf. Unten ist nun ein ScreenShot von Windows 7 64bit (Deutsch) auf PowerShell 2.0 ISE wenn man ein DOS-Ping absetzt und die Umlaute sind hier keine Probleme. 

    Es muss ein Problem in der PowerShell ISE 3.0 auf eine Windows 7 64bit (Deutsch) geben. Diesmal ist leider kein Feature sondern ein Bug (oder etwas was mir wirklich hinsichtlich der Konfiguration entgangen ist).

    Vielleicht kommt man drauf, warum es auf der PowerShell 3.0 ISE die Codepage nicht korrekt angezeigt wird.  

    Guy

    Dienstag, 4. Dezember 2012 12:02

Alle Antworten

  • Das ist kein Bug!
    Das hat was mit den verschiedenen Codierungen von Buchstaben zu tun!
    Das Problem ist schon so alt wie die Computer!

    Genau deshalb Arbeitet die PowerShell mit Objekten als Ergebnis und nicht mit Text wie hier DOS!

    Auch ein Buchstabe wird bei einem Computer durch Binär durch eine Zahl dargestellt.
    Nun gibt es z:B. von Windows zu Unix unterschiedlichen Zahlen zu Buchstaben Tabellen (Codierungen).
    Der Binäre Wert 65 ist in Windows z.B. der Buchstabe A

    Auch innerhalb von Windows gibt es die unterschiedlichsten Codierungstabellen.

    Der Ping Befehl ist ein DOS Kommando!
    DOS Befehle nutzen unter Windows die ASCII OEM Tabelle um die Buchstaben zu Codieren.
    Wenn du dir Text in einer "echten" DOS Konsole in eine Textdatei ausgeben lässt, mit z.B. dem folgenden Befehl:

    Ping localhost >C:\temp\ping.txt

    Und diese ping.txt mit dem Notepad anschaust wirst du denselben Fehler sehen!
    Notepad Nutzt zum einlesen der Buchstaben die Windows ANSI Tabelle.

    Beim ANSI Code und der ASCII Tabelle, wird jedes Zeichen nur mit einem Byte (8Bit) dargestellt. Das sind Maximal 255 Zeichen.
    Diese 255 Zeichen reichen aber nicht aus um alle Zeichen der Welt darzustellen (Kyrillisch, Chinesisch Griechisch usw....)
    Die PowerShell benutzt deshalb zum Darstellen der Zeichen eine Codierung mit 2Byte (16Bit) Pro Buchstabe diese nennt sich Unicode.

    Nimm anstatt des Ping Befehls das Cmdlet Test-Connection.

    http://magazin.c-plusplus.de/artikel/Einf%FChrung%20in%20Codepages%20und%20Unicode

    http://de.wikipedia.org/wiki/Zeichensatztabelle

    http://www.uwe-sieber.de/codepage.html


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Dienstag, 4. Dezember 2012 11:20
  • Vielen Dank für die schnelle Antwort! 

    Die Erläuterung zu den Problemen von Codepages beschreibt knapp und präzise mir was hier passieren kann, allerdings es liegt hier etwas anders. Ich habe auch nur Ping als Beispiel verwendet um zu demonstrieren das es in der PowerShell alleine und in der Shell in der PowerShell ISE Unterschiede gibt. Und das Problem entsteht eben nicht nur wenn DOS-Befehle sondern auch bei gewissen MS Cmdlets.

    Ich bin überhaupt darauf gestossen bin, wie ich einer meiner Modul auf PowerShell 3.0 umstellen möchte . Das Problem tritt/trat in PowerShell 2.0 nicht auf. Unten ist nun ein ScreenShot von Windows 7 64bit (Deutsch) auf PowerShell 2.0 ISE wenn man ein DOS-Ping absetzt und die Umlaute sind hier keine Probleme. 

    Es muss ein Problem in der PowerShell ISE 3.0 auf eine Windows 7 64bit (Deutsch) geben. Diesmal ist leider kein Feature sondern ein Bug (oder etwas was mir wirklich hinsichtlich der Konfiguration entgangen ist).

    Vielleicht kommt man drauf, warum es auf der PowerShell 3.0 ISE die Codepage nicht korrekt angezeigt wird.  

    Guy

    Dienstag, 4. Dezember 2012 12:02
  • Ja, Sorry für den CodePage Vortrag! Aber man weiß hier nicht auf welchem Wissens-Level der andere ist ;-)
    Das scheint wirklich ein Bug zu sein ich kann das hier replizieren, habe aber keine Lösung!

    Du kannst PowerShell Bugs Melden und schon gemeldete Bugs suchen :
    http://connect.microsoft.com/PowerShell


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Dienstag, 4. Dezember 2012 12:34
  • Ok. - Danke nochmals.

    Hast Du den schon gemeldet oder soll ich das abschicken?

    Guy  

    Dienstag, 4. Dezember 2012 12:40
  • Ich habe kein Problem damit! Du kannst das erwünschte Verhalten besser beschreiben! Mach mal ;-))

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Dienstag, 4. Dezember 2012 12:57