调用命令的问题

Problems with Invoke-Command

在我的脚本中,我想让 Exchange Online 通讯组成员加入我的数组 $members_id

我想 运行 cmdlet Get-DistributionGroupMember 在远程服务器上,所以它看起来像这样:

Invoke-Command -Session $Session -ScriptBlock {
    $members_id = Get-DistributionGroupMember -Identity "power_shell_test"
} -ArgumentList $members_id

在 运行 之后我得到一个错误:

The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.

当我删除 $members_id = 时,它 运行 很好。

如果您知道为什么会这样,请告诉我。

我不太清楚你为什么会收到错误(可能是因为你打开 $Session 的方式),但是如果你想要远程命令 Get-DistributionGroupMember 的输出局部变量 $members_id 您需要将代码更改为如下内容:

$members_id = Invoke-Command -Session $Session -ScriptBlock {
    Get-DistributionGroupMember -Identity "power_shell_test"
}

仅当您想将要解析其成员的组的 ID 传递到脚本块时才使用 -ArgumentList。您可以使用 Param() 指令将参数分配给脚本块内的变量:

$members_id = Invoke-Command -Session $Session -ScriptBlock {
    <b>Param($id)</b>
    Get-DistributionGroupMember -Identity <b>$id</b>
} <b>-ArgumentList $group_id</b>

或使用 automatic variable $args:

$members_id = Invoke-Command -Session $Session -ScriptBlock {
    Get-DistributionGroupMember -Identity <b>$args[0]</b>
} <b>-ArgumentList $group_id</b>

或者,您可以通过 using: scope modifier:

访问脚本块外的变量
$members_id = Invoke-Command -Session $Session -ScriptBlock {
    Get-DistributionGroupMember -Identity <b>$using:group_id</b>
}