我目前正在从 Exchange Online 导出所有共享邮箱访问。 它有效,但该导出中有很多禁用用户。
这就是问题开始的地方。即使我们使用 Azure AD 同步,在我们的 AD 中禁用的用户在 O365 中仍被标记为活动。所以使用过滤器不是一种选择。
我尝试将活动 AD 用户的 UPN 导出到 CSV,然后也导出我的共享邮箱,导入 CSV 并使用 Compare-Object 比较它们,但我也无法做到这一点。 我还尝试比较和删除数组中未指示为“==”的条目,但我不知道该怎么做。
是否有另一种方法可以在 Get-MailboxPermission cmdlet 中过滤活动 AD 用户?
#Get All AD Users
$ActiveADUsers = Get-ADUser -Filter * | Where {$_.Enabled -eq $True -and $_.userPrincipalName -like '*domain.com'} | Select @{expression={$_.userPrincipalName}; label='User'} `
| Export-Csv -Encoding UTF8 -Path "C:\activeadusers.csv" -Append -NoTypeInformation
#Multiple Shared Mailboxes
$SharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox -Resultsize unlimited -Filter {(Name -like "DOMAIN*")}
$Results = foreach ($SharedMailbox in $SharedMailboxes)
{
Get-MailboxPermission $SharedMailbox `
| Select-Object @{expression={$_.Identity}; label='Shared Mailbox'},@{Name='Name';expression={(Get-Recipient $_.user.tostring()).displayname}},User,AccessRights `
| Where-Object {($_.user -like '*@*')}
}
$Results | Export-Csv -Encoding UTF8 -Path "C:\sharedmailbox-access.csv" -Append -NoTypeInformation
这让我得到了我需要的文件,然后我尝试将这段代码合并到上面的代码中,但是列不对应并且非活动用户仍在其中:
$file1 = Import-Csv C:\sharedmailbox-access.csv
$file2 = Import-Csv C:\activeadusers.csv
$compareParams = @{
ReferenceObject = $file1
DifferenceObject = $file2
}
Compare-Object @compareParams -Property userPrincipalName -PassThru -IncludeEqual |
Where-Object -Property SideIndicator -eq '==' |
select @{expression={$_.Identity}; label='Shared Mailbox'},@{Name='Name';expression={(Get-Recipient $_.user.tostring()).displayname}},User,AccessRights |
Export-Csv -Path 'C:\newfile.csv' -Append -NoTypeInformation -Force``