PowerShell在`if( $? = $false )`语句中崩溃。

5

我正在使用PowerShell玩耍,遇到了一个在我的电脑上可以轻松重现的崩溃。

我不确定代码是否正确。然而,运行以下代码会导致powershell.exepowershell_ise.exe崩溃。我猜测我的使用if ($? = $false)是错误的,但在这种情况下不应该发生崩溃。删除If语句有助于避免崩溃。

我错过了什么吗?

我正在运行Windows 10 Pro和PowerShell 5.1.14393.206。

更新1

好的,感谢@Martin,我知道我错误地使用了=而不是-eq。但为什么会发生这种崩溃呢?

更新2

向PowerShell UserVoice提交了一个错误报告:https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/16977433-assigning-a-value-to-false-crashes

更新3

这似乎是一个已知的错误:https://github.com/PowerShell/PowerShell/issues/2243,应该很快就会被修复https://github.com/PowerShell/PowerShell/pull/2320

Test-Path "C:\test"
if ( $? = $false ) {
    Out-Host "Hello World"
}

Fault bucket 127386360339, type 5
Event Name: PowerShell
Response: Not available
Cab Id: 0

Problem signature:
P1: powershell.exe
P2: 10.0.14393.206
P3: stem.Management.Automation.PSInvalidCast
P4: stem.Management.Automation.PSInvalidCast
P5: ation.LanguagePrimitives.ThrowInvalidCastException
P6: ation.LanguagePrimitives.ThrowInvalidCastException
P7: Pipeli..ution Thread
P8: 
P9: 
P10: 

1
可以确认。当将任何值分配给 $? 时,PS控制台会崩溃(版本5.1.14393.206)。 - user2226112
1
似乎在v5.0(至少v5.0.10586.122)中不会发生这种情况。会显示有关将值分配给只读变量的适当错误消息。 - sodawillow
@Swonkie 请点击 https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/16977433-assigning-a-value-to-false-crashes 上的投票赞成。我已经提交了一个错误报告,你的投票赞成可能会有所帮助。 :) - bahrep
1
我只是输入了“$? = $false”就出现了错误。Powershell版本为5.1.41393.206。 - Walter Mitty
1个回答

10
你的代码有误。你正在赋值$false给一个只读变量问号变量。你可能想要用-eq替换=
Test-Path "C:\test"
if ( $? -eq $false ) {
    Out-Host "Hello World"
}

1
哎呀,我应该使用-eq而不是尝试分配一个新值。但是PowerShell不应该崩溃,并且必须告诉我我正在尝试运行无效的操作。 - bahrep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接