2016-12-20 2 views
5

den Code $? = $true in Powershell-Lauf stürzt das Programm mit einem „Powershell funktioniert nicht mehr“ Windows-Fehlermeldung.

Einige eingebaute wie $true oder $host werfen einen Fehler: Cannot overwrite variable true because it is read-only or constant.. Andere wie $myinvocation oder $null werden einfach ignoriert. Warum ist $? anders? Gibt es eine Dokumentation, auf welche Builttins welche Antwort hat? help about_automatic_variables hat keine Details.

renne ich zur Zeit Version 5.1. Ich habe auch versucht, powershell -version $n '$? = $true' und alle Versionen 3-5 Crash. Interessanterweise, Versionen 1 und 2 nicht; Sie werfen den schreibgeschützten Variablenfehler.

+3

Haben Sie eine Demontage des Codes möchten, warum es zeigt abstürzt, oder wollen Sie wissen, ob es dies tun soll ist? Die Antwort darauf ist ein definitives Nein. Silly Bug ist ein Fehler. PowerShell 3 war eine wesentliche neue Version, die PowerShell in die Dynamic Language Runtime überführte. ein Bündel von Verhaltensweisen änderte sich mit ihm. Einige nützlich, einige überraschend und einige einfach Buggy. Dies scheint einer der letzteren Fälle zu sein. –

+0

Ich fragte mich, ob es beabsichtigt/dokumentiert war. Interessant über Version 3 und das DLR, davon hatte ich vorher noch nichts gehört. Gibt es irgendwo einen Fehlerbericht oder sollte ich mir darüber keine Sorgen machen? –

+0

Seltsam. PSVersion 5.0.10586.117 wirft 'Kann Variable nicht überschreiben? weil es schreibgeschützt oder konstant ist. –

Antwort

4

Es sieht aus wie dies ein known bug ist. Der Fix wurde der aktuellen Version (6.0) hinzugefügt. Sie können die zugehörige Pull-Anforderung here finden.

Mein Mut mir sagen, dass der Grund für eine anderes Verhalten (zu anderen automatischen Variablen verglichen) ist die Tatsache, dass sowohl Sie als auch System versucht, auf diese Variable praktisch zur gleichen Zeit zu schreiben. Und obwohl ich weiß nicht, warum Sie es schreiben möchte (ich vermute, es ist alles mit etwas if ($? = $true) begann ...), ich stimme zu, dass man wirklich böse ist.

Verwandte Themen