将add方法与局部变量和Invoke-Command结合使用

时间:2019-06-24 18:48:18

标签: powershell

我正在研究DSC脚本资源,其中一部分涉及在远程服务器上使用.Add()。我正在尝试做的部分工作是填充本地列表对象。之所以需要在远程主机上完成,是因为配置管理器(SCCM)的必需模块必须位于安装了管理控制台的系统上。

我试图在远程会话中将$UpdateGroupMembers = New-Object System.Collections.Generic.List[System.Object] Invoke-Command -ComputerName $ServerName -Credential $Creds -ScriptBlock { foreach ($Collection in $Using:UpdateCollections) { $Member = Get-CMDeviceCollectionDirectMembershipRule -CollectionId $Collection $Using:UpdateGroupMembers.Add($Member) } } 方法与本地变量一起使用,

Using

我收到错误消息“ primeValue表达式中不允许表达”。有没有办法解决?我的处理方式有误吗?

1 个答案:

答案 0 :(得分:1)

$using:是范围修饰符。范围修饰符只能与变量名一起使用。

您想要的是在脚本块内的局部变量上调用局部方法。为此,请返回结果并将其用于填充对象。

$GroupMembers = Invoke-Command -ComputerName $ServerName -Credential $Creds -ScriptBlock {
    $UpdateGroupMembers = New-Object System.Collections.Generic.List[System.Object]
    foreach ($Collection in $Using:UpdateCollections) {
        $Member = Get-CMDeviceCollectionDirectMembershipRule -CollectionId $Collection
        [void]$UpdateGroupMembers.Add($Member)
    }
    $UpdateGroupMembers
}

以上内容在远程计算机上定义了列表,并将其填充到其中,并将执行后的结果存储在$GroupMembers中。

旁注:[void]强制转换是为了防止List.Add()方法返回不需要的数据。