powershell 通过Get-Mailbox使用多个OU

6tdlim6h  于 2023-06-29  发布在  Shell
关注(0)|答案(1)|浏览(148)

我有这个PowerShell代码,它从一个OrganisationalUnit获取邮箱权限。它对于单个OU非常有效。但我想运行多个OU。
我该怎么做?
例如

"OU=gmsa_accounts,DC=contoso,DC=local"
"OU=svc_accounts,DC=contoso,DC=local"
"OU=adm_accounts,OU=Users,DC=contoso,DC=local"

脚本:

$Mailboxes = Get-Mailbox -Resultsize Unlimited -RecipientTypeDetails UserMailbox -OrganizationalUnit "OU=gmsa_accounts,DC=contoso,DC=local"
# creating a table to combine information
$MailboxesResult = @()

# processing all the mailboxes
ForEach ($Mailbox in $Mailboxes){
    # getting manager
    $permissions = Get-MailboxPermission -Identity $Mailbox.Alias | ? { ($_.IsInherited -eq $False) -and -not ($_.User -Like "NT AUTHORITY*") }
    $fullAccess = $permissions | Where-Object { $permissions.AccessRights -eq "FullAccess" }
    $permissions = Get-RecipientPermission -Identity $mailbox.Alias | ? { ($_.IsInherited -eq $False) -and -not ($_.Trustee -Like "NT AUTHORITY*") }
    $SendAs = $permissions | Where-Object { $permissions.AccessRights -eq "SendAs" }

    # combine eveything in a PSCustomObject
    $item = [PSCustomObject]@{
        Name                          = $mailbox.DisplayName
        FullAccess                    = $fullAccess.User -replace '^.+\\' -join ','
        SendAs                        = $($sendas.Trustee) -join (",")
    }
    $MailboxesResult += $item
}
#Export collected information to CSV
$MailboxesResult | Export-Csv -NoTypeInformation C:\Temp\MailboxFolderPermissions2.csv -Encoding UTF8
e0bqpujr

e0bqpujr1#

最简单的选择(取决于您有多少OU)是简单地将您想要查询的每个OU分配到一个数组中,然后循环获取每个结果,循环完成后最终得到Export-CSV。例如:

$allOUs="OU=gmsa_accounts,DC=contoso,DC=local",
"OU=svc_accounts,DC=contoso,DC=local",
"OU=adm_accounts,OU=Users,DC=contoso,DC=local"

# creating a table to combine information
$MailboxesResult = @()
foreach ($OU in $allOUs)
{
    $Mailboxes = Get-Mailbox -Resultsize Unlimited -RecipientTypeDetails UserMailbox -OrganizationalUnit $OU

    # processing all the mailboxes in the current OU
    ForEach ($Mailbox in $Mailboxes){
        # getting manager
        $permissions = Get-MailboxPermission -Identity $Mailbox.Alias | ? { ($_.IsInherited -eq $False) -and -not ($_.User -Like "NT AUTHORITY*") }
        $fullAccess = $permissions | Where-Object { $permissions.AccessRights -eq "FullAccess" }
        $permissions = Get-RecipientPermission -Identity $mailbox.Alias | ? { ($_.IsInherited -eq $False) -and -not ($_.Trustee -Like "NT AUTHORITY*") }
        $SendAs = $permissions | Where-Object { $permissions.AccessRights -eq "SendAs" }

        # combine eveything in a PSCustomObject
        $item = [PSCustomObject]@{
            Name                          = $mailbox.DisplayName
            FullAccess                    = $fullAccess.User -replace '^.+\\' -join ','
            SendAs                        = $($sendas.Trustee) -join (",")
        }
        $MailboxesResult += $item
    }
}
#Export collected information to CSV
$MailboxesResult | Export-Csv -NoTypeInformation C:\Temp\MailboxFolderPermissions2.csv -Encoding UTF8

对于大量的OU,我可能会考虑以编程方式检索OU列表,但这实际上取决于您的设置,什么会/不会起作用。例如,如果您想要的所有OU都在<name>_accounts中,那么您可以尝试以下操作

$allOUs=Get-ADOrganizationalUnit -Filter 'Name -like "*_accounts"' -SearchBase 'DC=contoso,DC=local' | Select DistinguishedName

并在开始时使用它而不是硬编码数组。

相关问题