为什么以下3行在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
),但是我想在这里理解差异的原因。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您从ISE或交互式运行此操作,则会保存变量。在您的示例中,我不确定您使用Where-Object
代替%
/ ForEach-Object
的原因。研究我认为你正在尝试做的事情:
$a = @(1, 2, 3)
[Array]$b
$a | % { $b += $_ }
$b | % { $_.GetType() }