为什么以下三行在没有PowerShell提示错误的情况下运行,但在脚本(foo.ps1)中运行时返回错误?在这两种情况下,$b -eq $null
返回$true
和$b.GetType()
在$null
上返回调用错误,但在交互式会话中$b
有些不同。
$a = 1,2,3
[array]$b = $a | where {$false}
$b | where {$_.GetType()}
当作为脚本运行,最后一行返回
你不能调用一个空值表达式的方法。
在试图阻止数组展开的尝试中,我遇到了这个问题。删除[array]
会导致错误消失,我将继续尝试更好地理解展开规则(我希望$b
是一个空数组,但不是$null
),但我想了解其中的差异原因。
'$ a'是一个脚本块。这是为了这个目的吗?为什么'where {$ false}'?在这个例子中'$ b'应该为null,因为where块不通过管道。 – Matt
[相关](https://stackoverflow.com/questions/20022976/difference-between-powershell-console-and-powershell-ise) – Matt
并不意味着让$ a成为一个scriptblock,对不起。它本意是一个数组。我已经更新了它。幸运的是,它不会影响结果和潜在的问题。 – aggieNick02