merge-dominoUser.ps1 a powershell script for move-dominoUser cmdlet
# merge-DominoUser.ps1
# ------------- DISCLAIMER -----------------------
# The code herein is provided as is with no gurantee or waranty concerning
# the usability or impact on your messaging system and may be used, distributed
# or modified for use provided the parties agree and acknowledge the Microsoft or
# Microsoft Partners have neither accountabilty or responsibility for results
# produced by use of this script.
# Developed by Jeff Kizner, Brad Hughes and Ed Thornburg
# -------------------------------------------------
# The script below provides the same functionality as move-dominoUser but does not enable
# the email address policy generator [RUS]. The default behavior of move-dominoUser is to
# mailbox enable the user object, apply email address policy as primary addresses and
# then add email addresses from contacts as secondary email addresses. If you intend to
# persist contact email addresses as primary email addresses of the mailbox enabled user,
# then this script is for you.
#
# The script takes a csv with header of samAccountName,InternetAddress and
# mailbox enables the user object matching the samAccountName and merging
# the contact with the matching primary smtp address.
# In this case the DisplayName is persisted as well.
#
# The minimum csv header: samAccountName,InternetAddress,displayName
#
# The script has four major sections, each of which can be run independently
# in sequence; a variable delay timer separates the major sections and is
# implementedto accomodate for directory replication latency
#
# process flow:
# add the heading for Domino directory values to be persisted to Active Directory
# note that the combinedObjectData merges the attribute data from the csv and
# the contact for the associated user into the same object and that object
# is finally exported to csv to provide the data for the enable-mailbox cmdlet
# the last part adds specific data to the mailbox enabled user
#
# -verbose provides realtime viewing of operations
start-transcript
.\move-dominoUserScript.txt
# $netbiosDomainName = is a static definition of the netbios domain name of your active directory forest
# this value combined with the samaccountname;
# cmdlets accept domain\samaccountname for -identity switch
$netbiosDomainName
= "Your_netBIOS_domain"
# ParseEmailAddresses function is necessary as contact.emailAddresses returns an array object;
# not the content of the array.
function
ParseEmailAddresses([object[]] $addresses)
{
$sbAddress
= New-Object System.Text.StringBuilder;
$tmp
= $sbAddress.Append($addresses[0])
for
($x = 1; $x -lt $addresses.Length; $x++)
{
$tmp
= $sbAddress.AppendFormat(",{0}",$addresses[$x]);
}
$sbAddress
.ToString();
}
# end function
# the code below merges the data for each entry in the csv
# with data from the contact that corresponds to that entry in the csv
# the combined data is in turn written to a csv containing all data
# necessary to persist the data for the mailbox enabled user
$dominoExportData
= Import-Csv .\migrationList.csv
#
$combinedObjectData
= $dominoExportData | foreach {
$contactInfo
= Get-MailContact -Identity $_.InternetAddress | Select-Object PrimarySmtpAddress,LegacyExchangeDN,EmailAddresses; ****
Add-Member
-InputObject $_ -MemberType NoteProperty -Name PrimarySmtpAddress -Value $contactinfo.PrimarySmtpAddress; ****
Add-Member
-InputObject $_ -MemberType NoteProperty -Name LegacyExchangeDN -Value $contactinfo.LegacyExchangeDN;
$strAddress
= ParseEmailAddresses($contactinfo.EmailAddresses); ****
Add-Member
-InputObject $_ -MemberType NoteProperty -Name EmailAddresses -Value $strAddress;
$_
;
}
$combinedObjectData
| Export-Csv -NoType .\mkmbx.csv
# variable delay timer to accomodate directory replication latency
sleep
-seconds 60
#
import-csv
MigrationList.csv | foreach {
get-mailcontact -identity
$_.internetaddress | remove-mailcontact -confirm:$FALSE
}
# variable delay timer to accomodate directory replication latency
sleep
-seconds 60
#
import-csv
mkmbx.csv | foreach {
$targetdatabase
= ((get-mailbox -resultsize unlimited | group-object -Property database | select-object name,count | sort-object -Property count)[0].name)
Enable-Mailbox -Identity
"$netbiosDomainName\$($_.samAccountName)" -database $targetdatabase -ManagedFolderMailboxPolicyAllowed:$TRUE -ActiveSyncMailboxPolicy "Default" -ManagedFolderMailboxPolicy "Empty Deleted Items" -confirm:$FALSE
}
# variable delay timer to accomodate directory replication latency
sleep
-seconds 120
# code adds to the previously enabled mailbox
import-csv
mkmbx.csv | foreach {
$mailaddr
= $_.emailaddresses
$mailaddr
= $mailaddr.Split(",")
# add the legacyExchangeDN of the contact as X500 of user to allow
# for reply to mail sent when user was in foreign system
#
$mailaddr
+= "x500:$($_.LegacyExchangeDN)"
set-mailbox -Identity
"$netbiosDomainName\$($_.samAccountName)" -EmailAddressPolicyEnabled $false -PrimarySmtpAddress $_.primarySMTPAddress -verbose
set-mailbox -Identity
"$netbiosDomainName\$($_.samAccountName)" -EmailAddresses $mailaddr -verbose
set-casmailbox -Identity
"$netbiosDomainName\$($_.samAccountName)" -ActiveSyncEnabled $FALSE -IMAPEnabled $FALSE -POPEnabled $FALSE -verbose
# persist displayName from csv input file
Set-User -Identity
$_.samAccountName -DisplayName $_.displayName.Trim() -verbose
}
stop-transcript
Comments
- Anonymous
January 01, 2003
Some time ago I blogged about my experience with the Transporter Suite when migrating from Lotus Notes