powershell scriptblock returns NULL 尽管它不应该
powershell scriptblock returns NULL eventhough it shouldn't
我试图理解为什么在下面的示例中脚本块 returning 列表对象 return 为空。即使对于其他类型,它也能正常工作。
$s1 = {
param($string);
$list = [System.Collections.Generic.List[object]]::new();
return $list;
}
$s2 = {
param($string);
return 'test';
}
$r1 = (Invoke-Command -ScriptBlock ($s1) -ArgumentList('something'));
$r2 = (Invoke-Command -ScriptBlock ($s2) -ArgumentList('something'));
write-host ($null -eq $r1); # True
write-host ($null -eq $r2); # False
write-host ($r1); # <empty>
write-host ($r2); # test
以上片段的结果是:
True
False
test
我预计:
False
False
System.Collections.Generic.List`1[System.Object]
test
有人可以帮我理解为什么 $s1
脚本块会 return $null
吗?
PowerShell 喜欢枚举(或展开)集合,包括[List]
,这正是这里发生的事情.
要抑制此行为,请使用 Write-Output -NoEnumerate
:
$s1 = {
param($string)
$list = [System.Collections.Generic.List[object]]::new()
return Write-Output $list -NoEnumerate
}
我试图理解为什么在下面的示例中脚本块 returning 列表对象 return 为空。即使对于其他类型,它也能正常工作。
$s1 = {
param($string);
$list = [System.Collections.Generic.List[object]]::new();
return $list;
}
$s2 = {
param($string);
return 'test';
}
$r1 = (Invoke-Command -ScriptBlock ($s1) -ArgumentList('something'));
$r2 = (Invoke-Command -ScriptBlock ($s2) -ArgumentList('something'));
write-host ($null -eq $r1); # True
write-host ($null -eq $r2); # False
write-host ($r1); # <empty>
write-host ($r2); # test
以上片段的结果是:
True
False
test
我预计:
False
False
System.Collections.Generic.List`1[System.Object]
test
有人可以帮我理解为什么 $s1
脚本块会 return $null
吗?
PowerShell 喜欢枚举(或展开)集合,包括[List]
,这正是这里发生的事情.
要抑制此行为,请使用 Write-Output -NoEnumerate
:
$s1 = {
param($string)
$list = [System.Collections.Generic.List[object]]::new()
return Write-Output $list -NoEnumerate
}