运行 脚本块时如何使 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 { ,@() }
我正在创建一个函数,有时它会 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 { ,@() }