Instantly share code, notes, and snippets.
Created
August 1, 2018 16:21
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
-
Save exactmike/321f44b1a2dac344b4ba3192e525620e to your computer and use it in GitHub Desktop.
Exchange Recipient Extract via AD Function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function Get-AllADRecipientObjects | |
| { | |
| [cmdletbinding()] | |
| param | |
| ( | |
| [Parameter()] | |
| [AllowNull()] | |
| [int]$ResultSetSize = $null | |
| , | |
| [string[]]$ADUserAttributes | |
| , | |
| [string[]]$ADGroupAttributes | |
| , | |
| [string[]]$ADContactAttributes | |
| , | |
| [string[]]$ADPublicFolderAttributes | |
| , | |
| [string]$Filter | |
| , | |
| [parameter(Mandatory)] | |
| [ValidateScript({Test-Path -path $_})] | |
| [string]$ExportDataToFolder | |
| ) | |
| if (-not $PSBoundParameters.ContainsKey('ADUserAttributes')) | |
| { | |
| $ADUserAttributes = @( | |
| 'altRecipient','c','CanonicalName','city','cn','co','country','company','deliverandRedirect','department','displayName','DistinguishedName','employeeID','employeeNumber','enabled','extensionattribute1','extensionattribute10','extensionattribute11','extensionattribute12','extensionattribute13','extensionattribute14','extensionattribute15','extensionattribute2','extensionattribute3','extensionattribute4','extensionattribute5','extensionattribute6','extensionattribute7','extensionattribute8','extensionattribute9','forwardingAddress','GivenName','homeMDB','homeMTA','legacyExchangeDN','Mail','mailNickname','mS-DS-ConsistencyGuid','msExchArchiveGUID','msExchArchiveName','msExchGenericForwardingAddress','msExchHideFromAddressLists','msExchHomeServerName','msExchMailboxGUID','msExchMasterAccountSID','msExchRecipientDisplayType','msExchRecipientTypeDetails','msExchRemoteRecipientType','msExchUsageLocation','msExchUserCulture','msExchVersion','msExchWhenMailboxCreated','notes','ObjectGUID','physicalDeliveryOfficeName','SamAccountName','SurName','targetAddress','userPrincipalName','whenChanged','whenCreated','AccountExpirationDate','LastLogonDate','createTimeStamp','modifyTimeStamp','memberof','msexchextensioncustomattribute1','msexchextensioncustomattribute2','msexchextensioncustomattribute3','msexchextensioncustomattribute4','msexchextensioncustomattribute5','msExchPoliciesExcluded','proxyAddresses','objectClass' | |
| ) | |
| } | |
| if (-not $PSBoundParameters.ContainsKey('ADGroupAttributes')) | |
| { | |
| $ADGroupAttributes = @( | |
| 'c','CanonicalName','cn','co','company','department','displayName','DistinguishedName','extensionattribute1','extensionattribute10','extensionattribute11','extensionattribute12','extensionattribute13','extensionattribute14','extensionattribute15','extensionattribute2','extensionattribute3','extensionattribute4','extensionattribute5','extensionattribute6','extensionattribute7','extensionattribute8','extensionattribute9','legacyExchangeDN','Mail','mailNickname','mS-DS-ConsistencyGuid','msExchHideFromAddressLists','msExchRecipientDisplayType','msExchRecipientTypeDetails','msExchRemoteRecipientType','msExchVersion','msExchWhenMailboxCreated','notes','ObjectGUID','physicalDeliveryOfficeName','SamAccountName','whenChanged','whenCreated','createTimeStamp','modifyTimeStamp','memberof','msexchextensioncustomattribute1','msexchextensioncustomattribute2','msexchextensioncustomattribute3','msexchextensioncustomattribute4','msexchextensioncustomattribute5','msExchPoliciesExcluded','proxyAddresses','Members','objectClass' | |
| ) | |
| } | |
| if (-not $PSBoundParameters.ContainsKey('ADContactAttributes')) | |
| { | |
| $ADContactAttributes = @( | |
| 'CanonicalName','CN','Created','createTimeStamp','Deleted','Description','DisplayName','DistinguishedName','givenName','instanceType','internetEncoding','isDeleted','LastKnownParent','legacyExchangeDN','mail','mailNickname','mAPIRecipient','memberOf','Modified','modifyTimeStamp','msExchADCGlobalNames','msExchALObjectVersion','msExchPoliciesExcluded','Name','ObjectCategory','ObjectClass','ObjectGUID','ProtectedFromAccidentalDeletion','proxyAddresses','showInAddressBook','sn','targetAddress','textEncodedORAddress','whenChanged','whenCreated' | |
| ) | |
| } | |
| if (-not $PSBoundParameters.ContainsKey('ADPublicFolderAttributes')) | |
| { | |
| $ADPublicFolderAttributes = @( | |
| 'c','CanonicalName','cn','co','company','department','displayName','DistinguishedName','extensionattribute1','extensionattribute10','extensionattribute11','extensionattribute12','extensionattribute13','extensionattribute14','extensionattribute15','extensionattribute2','extensionattribute3','extensionattribute4','extensionattribute5','extensionattribute6','extensionattribute7','extensionattribute8','extensionattribute9','forwardingAddress','GivenName','legacyExchangeDN','Mail','mailNickname','mS-DS-ConsistencyGuid','msExchArchiveGUID','msExchArchiveName','msExchGenericForwardingAddress','msExchHideFromAddressLists','msExchMailboxGUID','msExchMasterAccountSID','msExchRecipientDisplayType','msExchRecipientTypeDetails','msExchRemoteRecipientType','msExchUsageLocation','msExchUserCulture','msExchVersion','msExchWhenMailboxCreated','notes','ObjectGUID','physicalDeliveryOfficeName','SamAccountName','targetAddress','userPrincipalName','whenChanged','whenCreated','createTimeStamp','modifyTimeStamp','memberof','msexchextensioncustomattribute1','msexchextensioncustomattribute2','msexchextensioncustomattribute3','msexchextensioncustomattribute4','msexchextensioncustomattribute5','msExchPoliciesExcluded','proxyAddresses','objectClass' | |
| ) | |
| } | |
| #Get the Mail Enabled Groups | |
| if ([string]::IsNullOrWhiteSpace($Filter)) {$GroupFilter = '*'} else {$GroupFilter = $Filter} | |
| Write-Verbose -Message "Get groups with filter: $GroupFilter" | |
| $AllGroups = Get-ADGroup -ResultSetSize $ResultSetSize -Properties $ADGroupAttributes -Filter $GroupFilter | Select-Object -Property * -ExcludeProperty Property*,Item,*Properties | |
| $AllMailEnabledGroups = @($AllGroups | Where-Object -FilterScript {$_.legacyExchangeDN -ne $NULL -or $_.mailNickname -ne $NULL -or $_.proxyAddresses -ne $NULL}) | |
| Write-Verbose -Message "Got $($AllMailEnabledGroups.Count) Mail Enabled Groups" | |
| #Get the Mail Enabled Contacts | |
| $ContactFilter = "objectclass -eq 'contact' " | |
| if ([string]::IsNullOrWhiteSpace($Filter)) {} else {$ContactFilter = "($ContactFilter) -and " + $Filter} | |
| Write-Verbose -Message "Get Contacts with filter: $ContactFilter" | |
| $AllContacts = Get-ADObject -Filter $ContactFilter -Properties $ADContactAttributes -ResultSetSize $ResultSetSize | Select-Object -Property * -ExcludeProperty Property*,Item,*Properties | |
| $AllMailEnabledContacts = $AllContacts | Where-Object -FilterScript {$_.legacyExchangeDN -ne $NULL -or $_.mailNickname -ne $NULL -or $_.proxyAddresses -ne $NULL} | |
| Write-Verbose -Message "Got $($AllmailenabledContact.Count) Mail Enabled Contacts" | |
| #Get the Mail Enabled Users | |
| if ([string]::IsNullOrWhiteSpace($Filter)) {$UserFilter = '*'} else {$UserFilter = $Filter} | |
| Write-Verbose -Message "Get Users with filter: $UserFilter" | |
| $AllUsers = Get-ADUser -ResultSetSize $ResultSetSize -Filter $UserFilter -Properties $ADUserAttributes | Select-Object -Property * -ExcludeProperty Property*,Item,*Properties | |
| $AllMailEnabledUsers = $AllUsers | Where-Object -FilterScript {$_.legacyExchangeDN -ne $NULL -or $_.mailNickname -ne $NULL -or $_.proxyAddresses -ne $NULL} | |
| Write-Verbose -Message "Got $($AllMailEnabledUsers.Count) Mail Enabled Users" | |
| #Get the Mail Enabled Public Folders | |
| $PublicFolderFilter = "objectclass -eq 'publicFolder' " | |
| if ([string]::IsNullOrWhiteSpace($Filter)) {} else {$PublicFolderFilter = "($PublicFolderFilter) -and " + $Filter} | |
| Write-Verbose -Message "Get Public Folders with filter: $PublicFolderFilter" | |
| $AllPublicFolders = Get-ADObject -Filter $PublicFolderFilter -ResultSetSize $ResultSetSize -Properties $ADPublicFolderAttributes | Select-Object -Property * -ExcludeProperty Property*,Item,*Properties | |
| $AllMailEnabledPublicFolders = $AllPublicFolders | Where-Object -FilterScript {$_.legacyExchangeDN -ne $NULL -or $_.mailNickname -ne $NULL -or $_.proxyAddresses -ne $NULL} | |
| Write-Verbose -Message "Got $($AllMailEnabledPublicFolders.Count) Mail Enabled Public Folders" | |
| #Combine results | |
| Write-Verbose -Message "Combining Results For Output" | |
| $AllMailEnabledADObjects = @($AllMailEnabledGroups;$AllMailEnabledContacts;$AllMailEnabledUsers;$AllMailEnabledPublicFolders) | |
| #Prepare Results for Export to XML File | |
| Write-Verbose -Message "Converting Results to XML" | |
| $Depth = 3 | |
| #Prepare to output file | |
| $FileName = [string]$(Get-Date -Format yyyyMMddHHmm) + '_AllADRecipientObjects.xml' | |
| $OutputPath = Join-Path -Path $ExportDataToFolder $FileName | |
| Write-Verbose -Message "and Writing Output File to Path $OutputPath" | |
| $outFileParams = @{ | |
| ErrorAction = 'Stop' | |
| Encoding = 'utf8' | |
| InputObject = $AllMailEnabledADObjects | |
| LiteralPath = $OutputPath | |
| } | |
| #output file | |
| Export-Clixml @outFileParams | |
| } | |
| #end function Get-AllADRecipientObjects |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment