azure 动力 shell :获取嵌套组的所有成员

whhtz7ly  于 2023-02-09  发布在  Shell
关注(0)|答案(2)|浏览(112)

我有一个 Azure AD组,由3个其他组组成。
在Azure中预览组我可以看到两个标签,“直接”和“所有成员”。直接显示三个组,“所有成员”列出组这些组的所有成员。
我试图获得这个组合组中所有成员的列表,但是当我使用Get-AzureADGroupMember时,它只给了我“直接”版本。
我可以调用什么方法来代替?

baubqpgj

baubqpgj1#

安纽姆
我对你的函数做了一些修改,让它返回设备和用户。另外,它删除了重复的itens,并接受管道化的ObjectId。

function Get-AadGroupMembers{
[CmdletBinding()]
param (
    [Parameter(Mandatory,
               ValueFromPipelineByPropertyName)]
[string]$ObjectID

)

# inicialização de variáveis
$output=@()

#verifica se o parâmetro informado é um objeto do tipo grupo do AAD
try {
    $object = Get-AzureADObjectByObjectId -ObjectId $objectid
}
catch {
    Write-Error "Objeto não pode ser avaliado. Verifique se é você está conectado ao Azure AD usando o comando Connect-AzureAD
    e se o parâmetro passado é um objeto do Azure AD"
    return
}

if ($object.ObjectType -ne "Group")
{
    Write-Error "Objeto não é do tipo Grupo"    
}

# obter todos os membros do grupo (usuários e subgrupos)
$members = Get-AzureADGroupMember -ObjectId $ObjectID -all $true
 

# laço lê todos os membros. Se não forem grupos, adiciona à variável output. Se for grupo, executa a própria função no grupo
foreach ($member in $members)
{

    if ($member.ObjectType -ne 'Group')
    {
        $output += $member
    } 
    else
    {
        $output += get-AadGroupMembers $member.ObjectId
    }
}

# exclui linhas repetidas do resultado final
$output | Select-Object -Unique

}

91zkwejq

91zkwejq2#

目前,我已经创建了自己的函数来解决这个问题,它将objectId作为参数(必须是一个组),然后递归地遍历列表。

Function  Get-AzureADGroupMembers($groupId) {

   $output = @()

   $group = (Get-AzureADGroupMember -ObjectId $groupId -All $True| Select ObjectId).ObjectId           
   foreach($objectid in $group)
     {

        $aad_object =  Get-AzureADObjectByObjectId -ObjectId $objectid

        #Add to output if object is a user
        if ($aad_object.ObjectType -eq 'User')
        {
                   $output += New-Object PSObject -property @{ 
                    ObjectId = $aad_object.ObjectId
                 }
        }
          
        #Recursive call if the object is a group
        if ($aad_object.ObjectType -eq 'Group')
        {
                   $output += Get-AzureADGroupMembers -groupId $aad_object.ObjectId
        }
     }
     
    return $output
}

相关问题