运行 脚本块时如何使 Invoke-Command return 为空数组而不是 null

How to make Invoke-Command return empty array instead of null when run script block

我正在创建一个函数,有时它会 return 一个空数组,因为没有结果。此功能可能需要 运行 和 Invoke-Command 用于某些场景,例如在远程 PC 上 运行 等

但我发现,当我的函数 运行 在 Invoke-Command 下带有脚本块时,它不能 return 空数组,而只能 null

所以我尝试发现,Invoke-Command 似乎无法 return 清空数组,即使我明确地这样做了。

例如:

> $foo = @()
> $foo.GetType()

IsPublic IsSerial Name                                     BaseType                                          
-------- -------- ----                                     --------                                          
True     True     Object[]                                 System.Array 

> $foo = Invoke-Command -ScriptBlock { @() }
> $foo.GetType()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $foo.GetType()
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

> $foo -eq $null
True

那么在这种情况下我如何 return 清空数组呢?这里有什么错误吗?或者这里有什么技巧?

只需在 returning 值前加上逗号 ,(数组构造运算符)。然后 return 值将不会被压扁为 $null:

$foo = Invoke-Command -ScriptBlock { ,@() }