首页 > 解决方案 > Powershell将数组元素作为参数传递

问题描述

我是 PowerShell 新手,我被困住了 :(。我写了一个我认为简单的脚本来将用户列表添加到 AD 组。但不幸的是它不起作用。我在数组中得到了正确的 objectId但是当我尝试将它作为参数传递时它失败了。无论如何找到前进的方法吗?我觉得这很简单,但我尝试了很多不同的事情,而且它说我被卡住了

在代码段下方添加了一些说明

$UsersToAdd = @(
    'user@domain.com',
    'user2@domain.com'
)
$ParentGroup = "DomainGroupX"

ForEach ($User in $UsersToAdd)
{
    $UserId = az ad user list --upn $User --query [].objectId
    $test = $UserId[1]
    If ($UserId.count -le 1) { echo "$User not found" }else {
        az ad group member add --group $ParentGroup --member-id $test
    }
}

问题出在这一行: az ad group member add --group $ParentGroup --member-id $test

此 $test 项目是一个数组,其中包含一个 ObjectId,类似于 ["sdjasddheiieyieyie"]

但是现在当我尝试通过它时它失败了,而下面的方法确实有效 az ad group member add --group $ParentGroup --member-id "sdjasddheiieyieyie"

谢谢!!

标签: powershellazure-active-directory

解决方案


您正在使您的 JMESPath 查询比它需要的更复杂:

$UsersToAdd= 'user@domain.com','user2@domain.com'
$ParentGroup = "DomainGroupX"

Foreach ($User in $UsersToAdd) {
    $UserId = az ad user list --upn $User --query [0].objectId
    if ($UserId) { 
        az ad group member add --group $ParentGroup --member-id $UserId
    } else {
        "$User not found"
    }
}

从一开始就对 JSON 数组进行索引可以避免不必要的复杂性。


Using[].objectId将数组结构作为围绕objectId值的字符串返回。另一个问题是它通过包含您必须考虑的前面空格来格式化您想要的值。

$UsersToAdd= 'user@domain.com','user2@domain.com'
$ParentGroup = "DomainGroupX"

Foreach ($User in $UsersToAdd) {
    $UserId = az ad user list --upn $User --query [].objectId
    $UserId = $UserId[1].Trim()
    if ($UserId) { 
        az ad group member add --group $ParentGroup --member-id $UserId
    } else {
        "$User not found"
    }
}

推荐阅读