通过用户搜索获取-MgGroupMember - 需要数组匹配方面的帮助

问题描述 投票:0回答:1

我遇到了 PowerShell 语法问题:我似乎无法将一个数组的成员与另一个数组匹配,但我可以确认这两个数组中都存在这些成员。有人可以指出我的逻辑错误吗?

背景:

我想根据成员属性的搜索字符串(例如 DisplayName 和 Surname)在 Entra 中搜索特定组的所有成员。考虑到 Get-Mg* -filter 调用的限制,我想出了这种方法:

$groupName = 'staff'            # all results should be in staff group
$userMatchString = 'Be'         # e.g. [Be]n Smith, Jim [Be]am...
$domainMatch = 'example.com'    # custom domain - no Entra guests

## choose a central M365 group filter
$group = get-mggroup -Filter "DisplayName eq '$($groupName)'"
$groupMemberIds=Get-MgGroupMember -GroupId $group.id  -ConsistencyLevel eventual -All | select Id

## find Entra users matching a search string
## Due to graph filter limitations we do separate calls per attribute
$userMatches=@(Get-MgUser -ConsistencyLevel eventual -Count userCount -Filter "startsWith(DisplayName, '$($userMatchString)')" | where { $_.Mail -like "*@$($domainMatch)"})

$userMatches+=@(Get-MgUser -ConsistencyLevel eventual -Count userCount -Filter "startsWith(Surname, '$($userMatchString)')" | where { $_.Mail -like "*@$($domainMatch)" })

此时

$groupMemberIds
包含每个符合条件的要搜索的人,
$userMatches
包含每个 Entra 搜索结果(可能在组中,也可能不在组中)。

这确认(对于我的结果集)第一条记录已经是匹配项:

$groupMemberIds | where { $_.Id -eq $userMatches[0].Id }

有人可以帮我解决(groupMemberIds)中(任何 userMatches )的语法吗?

这不起作用 - 它对所有这些都返回“false”:

$userMatches | ForEach-Object { $($_.Id -in $groupMemberIds) }

有什么想法吗?谢谢!

azure powershell microsoft-graph-api microsoft-entra-id
1个回答
0
投票

我不确定您指的是哪个限制,但您想要实现的目标肯定可以通过 OData 过滤器实现。我不确定您是否可以使用

Get-MgGroupMember
cmdlet 执行此操作,但使用
Invoke-MgGraphRequest
您可以执行以下操作:

$groupName = 'staff'            # all results should be in staff group
$userMatchString = 'Be'         # e.g. [Be]n Smith, Jim [Be]am...
$domainMatch = 'example.com'    # custom domain - no Entra guests

$group = Invoke-MgGraphRequest GET "v1.0/groups?$filter=displayName eq '$groupName'"
$groupId = $group.value.Id
$uri = "v1.0/groups/$groupId/members?`$filter=startsWith(displayName, '$userMatchString') and endsWith(mail, '$domainMatch')&`$count=true"

$result = do {
    $response = Invoke-MgGraphRequest GET $uri -Headers @{
        ConsistencyLevel = 'eventual'
    }
    $uri = $response.'@odata.nextLink'
    if ($response.value) {
        $response.value
    }
}
while ($uri)
© www.soinside.com 2019 - 2024. All rights reserved.