2016-12-20 49 views
5

在PowerShell中运行代码$? = $true崩溃的程序与“powershell已停止工作”窗口的错误信息。

一些内置像$true$host抛出一个错误:Cannot overwrite variable true because it is read-only or constant.。其他人喜欢$myinvocation$null被忽略。为什么$?不同?有哪些内建文件具有哪些响应的文档? help about_automatic_variables没有任何详情。

我目前正在运行5.1版本。我也尝试使用powershell -version $n '$? = $true'和版本3-5全部崩溃。有趣的是,版本1和版本2没有;他们抛出只读变量错误。

+3

你想要反汇编代码,说明它为什么崩溃,或者你想知道它是否应该这样做?后者的答案是肯定的否定。愚蠢的错误是一个错误。 PowerShell 3是一个将PowerShell转换到动态语言运行时的新版本;一堆行为随着它而改变。一些有益的,一些令人惊讶的,一些只是普通的越野车。这似乎是后一种情况之一。 –

+0

我想知道是否有意/记录。有趣的是版本3和DLR,我之前没有听说过。有什么地方可以发送错误报告,或者我应该不担心吗? –

+0

奇怪。 PSVersion 5.0.10586.117抛出'不能覆盖变量?因为它是只读的或不变的。' –

回答

4

看起来这是一个known bug。 此修复程序已添加到当前正在工作的版本(6.0)中。你可以找到相关的请求here

我的直觉告诉我,不同行为(与其他自动变量相比)的原因是,您和系统都试图同时虚拟写入此变量。即使我不知道你为什么要写信给它(我怀疑这一切开始于if ($? = $true) ...),但我确实认为其中一个真的很糟糕。