导出不在 Office 365 安全组中的用户

Export users not in an office 365 security group

我需要查找不在 Office 365 安全组中的用户。获取租户中所有用户的列表后,我不确定如何继续。

这适用于拉取用户列表

Get-MSOLUser -all | Where-Object { $_.isLicensed -eq "True"} | Select-Object UserPrincipalName | Export-Csv -path .\users.csv

我不确定从这里到哪里去。 这正是我要找的东西。

Get-MSOLUser -all | Where-Object { $_.isLicensed -eq "True",-and $_.isNotMemberofGroup "SecurityGroup"} | Select-Object UserPrincipalName | Export-Csv -path .\users.csv

Cmdlet 本身不提供此类功能,但使用 PowerShell 我们可以使用 Compare-Object 检查两个对象数组之间的差异:

  1. 获取所有用户:$allUsers = Get-MSOLUser -all
  2. 获取您的群组成员:$groupMembers = Get-MsolGroupMember -GroupObjectId <Your-Group-ID>
  3. 比较两个数组:Compare-Object -ReferenceObject $groupMembers -DifferenceObject $allUsers -Property ObjectId
  4. 根据您的需要,您可以根据 SideIndicator 属性
  5. 筛选以上内容
  6. 通过管道将以上内容与 | 导出结果Export-CsV ...

我没有办法对此进行测试,但这应该是您使用此 pre-historic 模块应遵循的逻辑,首先获取目标组的成员列表(在本例中 ExampleGroup) 然后你可以遍历所有按这两个条件过滤的用户:

  1. 用户有许可证
  2. 用户不是目标组的成员
$targetGroup = "ExampleGroup"
$groupMembers = Get-MsolGroup $targetGroup | Get-MsolGroupMember

Get-MsolUser -All | ForEach-Object {
    if($_.isLicensed -eq $true -and $_.ObjectId -notin $groupMembers.ObjectId) {
        $_
    }
} | Select-Object UserPrincipalName | Export-Csv -Path .\users.csv