【发布时间】:2022-12-15 04:11:15
【问题描述】:
我正在尝试列出我们 Azure Active Directory 组织中的所有组以及所有相关成员(用户、组、联系人等)。
由于我无法找到通过各种 Microsoft 门户网站使用简单导出按钮执行此操作的方法,因此我开始通过 Powershell 获取对 Microsoft Graph API/SDK 的访问权限。
我绝不是 PowerShell 专家,因为它不是我的首选脚本之一;但是,据我所知,以这种方式提取组信息的能力相当有限。
以下是我迄今为止能够完成的工作:
- 使用
Get-MgGroup -All拉入组列表 - 使用
Get-MgGroupMembers拉回目录对象列表。
这就是我卡住的地方。从我读过的内容来看,默认情况下目录对象似乎只返回 ID 和删除日期。我想获得这些对象的显示名称;我显然可以通过为目录对象类型运行适当的“获取”cmdlet 来做到这一点(即Get-MgUser);据我所知,如果没有“反复试验”,就无法通过 PowerShell 收集目录对象的类型……简单地获取 displayName 似乎效率非常低。
是否有更有效的方法来通过 PowerShell cmdlet 确定目录对象的 displayName 或至少确定类型以便我可以编写 case 语句以在第一次尝试时运行正确的 cmdlet?
作为记录,这将被合并到一个 Powershell 脚本中,当前的迭代看起来像这样并且可以正常工作......假设传入 $member.Id 的 Id 属于用户类型目录对象。
Connect-MgGraph
$groups=Get-mgGroup -All
ForEach ($group in $groups){
$members = @{}
$members = Get-MgGroupMember -GroupId $group.Id -All
ForEach ($member in $members){
$user = Get-MgUser $member.Id
Write-Output $object.ODataType
Write-output $group.DisplayName "," $member.Id "," $user.UserType"," $user.DisplayName "," $user.UserPrincipalName "," $user.Mail >> C:scripts\Azure_Groups.txt
}
}
将不胜感激任何方向/协助。提前致谢!
【问题讨论】:
-
Get-MgGroupMember 返回可以是用户、设备、其他组或服务主体的对象。你至少应该检查一下你是否有用户调用 Get-MgUser 之前的对象。难道没有一个
.ObjectType属性可以显示这个吗? -
@Theo - 这也是我的假设,但据我所知,它看起来像是在 ODATA 中,我找不到从 PowerShell
$newGroup = Get-MgGroup -Filter "displayName eq '<groupName>'"Write-Output $newGroup.ObjectType扩展/查询的方法,但什么都不返回。
标签: powershell azure-active-directory microsoft-graph-api powershell-7.3