internal/functions/Import-ADPersonalAttribute.ps1
Function Import-ADPersonalAttribute { <# .SYNOPSIS Function to handle the import of many AD attribute .DESCRIPTION The function is called by Import-T2TAttributes when any of the following bool are $true: $IncludeGeneral, $IncludeAddress, $IncludePhones, $IncludeOrganization or -IncludeManager. Basically, the function must add a set of values and properties to the $Replace hashtable. The function also will handle the split in array cases and the replace of "---" to "," whenever would be necessary. .EXAMPLE PS C:\> Import-ADPersonalAttribute The cmdlet above will add a set of attributes to the $Replace array and return it to Import-T2TAttributes. #> # region -IncludeGeneral if ($CheckGeneral) { # In scenarios where the function doesn't have RSAT and AD module was exported from a # DC, there is a bug which prevent us from add all values as hashtable but we need to # loop the array and add one by one. This happens only for AD multi-value properties. if ($user.description -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$descriptionArr = $user.description.Split(";") ForEach ($description in $descriptionArr) { # We check the $ResolvedGUID to understand if it's a contact. Everything else should be user. if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{description=$description.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{description=$description.Replace("---",",")} } } } elseif ($user.description) { $descriptionArr = $user.description.Split(";") [void]$Replace.Add("description", $descriptionArr.Replace("---",",")) } if ($user.physicalDeliveryOfficeName) { [void]$Replace.Add("physicalDeliveryOfficeName", $user.physicalDeliveryOfficeName.Replace("---",",")) } if ($user.wWWHomePage) { [void]$Replace.Add("wWWHomePage", $user.wWWHomePage.Replace("---",",")) } if ($user.url -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$urlArr = $user.url.Split(";") ForEach ($url in $urlArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{url=$url.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{url=$url.Replace("---",",")} } } } elseif ($user.url) { $urlArr = $user.url.Split(";") [void]$Replace.Add("url", $urlArr.Replace("---",",")) } } # region -IncludeAddress if ($CheckAddress) { if ($user.streetAddress) { [void]$Replace.Add("streetAddress", $user.streetAddress.Replace("---",",")) } if ($user.l) { [void]$Replace.Add("l", $user.l.Replace("---",",")) } if ($user.st) { [void]$Replace.Add("st", $user.st.Replace("---",",")) } if ($user.postalCode) { [void]$Replace.Add("postalCode", $user.postalCode.Replace("---",",")) } if($user.c) { [void]$Replace.Add("c", $user.c) } if ($user.co) { [void]$Replace.Add("co", $user.co) } if ($user.countryCode) { [void]$Replace.Add("countryCode", $user.countryCode) } if ($user.postOfficeBox -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$postOfficeBoxArr = $user.postOfficeBox.Split(";") ForEach ($postOfficeBox in $postOfficeBoxArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{postOfficeBox=$postOfficeBox.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{postOfficeBox=$postOfficeBox.Replace("---",",")} } } } elseif ($user.postOfficeBox) { $postOfficeBoxArr = $user.postOfficeBox.Split(";") [void]$Replace.Add("postOfficeBox" , $postOfficeBoxArr.Replace("---",",")) } } # region -IncludePhones if ($CheckPhones) { if ($user.telephoneNumber) { [void]$Replace.Add("telephoneNumber", $user.telephoneNumber.Replace("---",",")) } if ($user.otherTelephone -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$otherTelephoneArr = $user.otherTelephone.Split(";") ForEach ($otherTelephone in $otherTelephoneArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{otherTelephone=$otherTelephone.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{otherTelephone=$otherTelephone.Replace("---",",")} } } } elseif ($user.otherTelephone) { $otherTelephoneArr = $user.otherTelephone.Split(";") [void]$Replace.Add("otherTelephone", $otherTelephoneArr.Replace("---",",")) } if ($user.homePhone) { [void]$Replace.Add("homePhone", $user.homePhone.Replace("---",",")) } if ($user.otherHomePhone -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$otherHomePhoneArr = $user.otherHomePhone.Split(";") ForEach ($otherHomePhone in $otherHomePhoneArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{otherHomePhone=$otherHomePhone.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{otherHomePhone=$otherHomePhone.Replace("---",",")} } } } elseif ($user.otherHomePhone) { $otherHomePhoneArr = $user.otherHomePhone.Split(";") [void]$Replace.Add("otherHomePhone", $otherHomePhoneArr.Replace("---",",")) } if ($user.pager) { [void]$Replace.Add("pager", $user.pager.Replace("---",",")) } if ($user.otherPager -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$otherPagerArr = $user.otherPager.Split(";") ForEach ($otherPager in $otherPagerArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{otherPager=$otherPager.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{otherPager=$otherPager.Replace("---",",")} } } } elseif ($user.otherPager) { $otherPagerArr = $user.otherPager.Split(";") [void]$Replace.Add("otherPager", $otherPagerArr.Replace("---",",")) } if ($user.mobile) { [void]$Replace.Add("mobile", $user.mobile.Replace("---",",")) } if ($user.otherMobile -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$otherMobileArr = $user.otherMobile.Split(";") ForEach ($otherMobile in $otherMobileArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{otherMobile=$otherMobile.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{otherMobile=$otherMobile.Replace("---",",")} } } } elseif ($user.otherMobile) { $otherMobileArr = $user.otherMobile.Split(";") [void]$Replace.Add("otherMobile", $otherMobileArr.Replace("---",",")) } if ($user.facsimileTelephoneNumber) { [void]$Replace.Add("facsimileTelephoneNumber", $user.facsimileTelephoneNumber.Replace("---",",")) } if ($user.otherFacsimileTelephoneNumber -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$otherFacsimileTelephoneNumberArr = $user.otherFacsimileTelephoneNumber.Split(";") ForEach ($otherFacsimileTelephoneNumber in $otherFacsimileTelephoneNumberArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{otherFacsimileTelephoneNumber=$otherFacsimileTelephoneNumber.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{otherFacsimileTelephoneNumber=$otherFacsimileTelephoneNumber.Replace("---",",")} } } } elseif ($user.otherFacsimileTelephoneNumber) { $otherFacsimileTelephoneNumberArr = $user.otherFacsimileTelephoneNumber.Split(";") [void]$Replace.Add("otherFacsimileTelephoneNumber", $otherFacsimileTelephoneNumberArr.Replace("---",",")) } if ($user.ipPhone) { [void]$Replace.Add("ipPhone", $user.ipPhone.Replace("---",",")) } if ($user.otherIpPhone -and $LocalMachineIsNotExchange.IsPresent -and $Null -eq $LocalAD) { [System.Collections.ArrayList]$otherIpPhoneArr = $user.otherIpPhone.Split(";") ForEach ($otherIpPhone in $otherIpPhoneArr) { if ($ResolvedGUID.Guid) { Set-RemoteADObject -Identity $ResolvedGUID.Guid -Server $PreferredDC -Add @{otherIpPhone=$otherIpPhone.Replace("---",",")} } else { Set-RemoteADUser -Identity $user.SamAccountName -Server $PreferredDC -Add @{otherIpPhone=$otherIpPhone.Replace("---",",")} } } } elseif ($user.otherIpPhone) { $otherIpPhoneArr = $user.otherIpPhone.Split(";") [void]$Replace.Add("otherIpPhone", $otherIpPhoneArr.Replace("---",",")) } if ($user.info) { [void]$Replace.Add("info", $user.info.Replace("---",",")) } } # region -IncludeOrganization if ($CheckOrganization) { if ($user.title) { [void]$Replace.Add("title", $user.title.Replace("---",",")) } if ($user.department) { [void]$Replace.Add("department", $user.department.Replace("---",",")) } if ($user.company) { [void]$Replace.Add("company", $user.company.Replace("---",",")) } } # region CheckContactManager. We can leverage this function to # import only contact managers' as MEU are previous created. if ($CheckContactManager -and $user.Manager) { try { # we must resolve the manager DN. Better using try/catch to avoid # scenarios that manager does not exist in the target environment $ManagerResolved = Get-ADUser -Identity $user.Manager -Properties distinguishedName -ErrorAction Stop if ($?) { [void]$Replace.Add("manager", $ManagerResolved.DistinguishedName) } } catch { Write-PSFMessage -Level Output -Message "Error: The manager $($user.Manager) could not be found and was not added to the contact $($user.DisplayName)." } } return $Replace } |