Skip to content

Instantly share code, notes, and snippets.

@exactmike
Created August 1, 2018 16:21
Show Gist options
  • Select an option

  • Save exactmike/321f44b1a2dac344b4ba3192e525620e to your computer and use it in GitHub Desktop.

Select an option

Save exactmike/321f44b1a2dac344b4ba3192e525620e to your computer and use it in GitHub Desktop.
Exchange Recipient Extract via AD Function
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