powershell – $null / empty interactive vs script difference

为什么以下3行在Power
Shell提示符下运行时没有错误,但在脚本中运行时返回错误(foo.ps1)?在这两种情况下,$b -eq $null都返回$true而$b.GetType()返回一个错误,用于调用$null,但是交互式会话中的$b有一些不同之处.

$a = 1,2,3
[array]$b = $a | where {$false}
$b | where {$_.GetType()}

以脚本形式运行时,最后一行返回

You cannot call a method on a null valued expression.

我在试图阻止阵列展开的命运多,但遇到了这个问题.删除[array]会使错误消失,我将继续尝试更好地理解展开规则(我希望$b是一个空数组,而不是$null),但我想了解原因这里的区别.

最佳答案 有一个
perfect explanation

>通过键入[array],您可以告诉变量是强类型的.我怀疑.NET代码中的这一行,触发异常,因为它需要一个类型作为变量…
http://referencesource.microsoft.com/#mscorlib/system/array.cs,72

点赞