To create External Contacts in Office 365/Exchange Online I’ve created a script which uses a CSV file for input. The file must be saved as “Unicode, Semicolon separated” (;) and must contain the following fields:
Name | Description |
ExternalEmailAddress | Email Address for the contact (this filed cannot contain spaces!) |
Name | Full / Display Name |
FirstName | First name |
LastName | Last name |
StreetAddress | Street Address |
City | City |
StateorProvince | State or Province |
PostalCode | ZIP or Postal Code |
Phone | Office Phone |
MobilePhone | Mobile Phone |
Pager | Fax |
HomePhone | Address |
Company | City |
Title | State or Province |
Department | ZIP or Postal Code |
CountryOrRegion | Country or Region |
Fax | Fax |
Initials | Initials |
Notes | Notes |
Office | Office |
Manager | Manager |
Hidden | Hide or show the contact in the Global Address List with this field.It can contain only two values: TRUE or FALSE. When using TRUE the contact is hidden. If this field is left blank, the contact is made visible (=TRUE). |
Script
Here’s the code for the script:
#### Create Function Logon to Office365 - Exchange Online function Logon { #### Pop-up a dialog for username and request your password $cred = Get-Credential #### Import the Local Microsoft Online PowerShell Module Cmdlets and Connect to O365 Online Import-Module MSOnline Connect-MsolService -Credential $cred #### Establish an Remote PowerShell Session to Exchange Online $msoExchangeURL = “https://ps.outlook.com/powershell/” $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $msoExchangeURL -Credential $cred -Authentication Basic -AllowRedirection Import-PSSession $session } #### Create Function Logoff Office365 & Exchange Online function Logoff { #### Remove the Remote PowerShell Session to Exchange Online ---- Get-PsSession | Remove-PsSession #Remove-PsSession $session } ############################################################################################################################ ############################################################################################################################ #### Logon to Office 365 & Exchange Online Logon #### Ask the user for input CSV File [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $ofd = New-Object System.Windows.Forms.OpenFileDialog #$ofd.InitialDirectory = "d:\scripts" $ofd.ShowHelp=$true if($ofd.ShowDialog() -eq "OK") { $ofd.FileName } $File = $ofd.Filename #### Create Log File + Start Logging if ($File -ne $Null) { $Log = $File + ".log" $ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" Start-Transcript -path $Log -append } #### Import CSV Import-csv -Delimiter ";" $File | ForEach { #### Create Contacts New-MailContact -Name $_.Name -DisplayName $_.Name -ExternalEmailAddress $_.ExternalEmailAddress -FirstName $_.FirstName -LastName $_.LastName #### Add Extra Information depending on Manager Field if (!$_.Manager) { Set-Contact -Identity $_.Name -StreetAddress $_.StreetAddress -City $_.City -StateOrProvince $_.StateOrProvince -PostalCode $_.PostalCode -Phone $_.Phone -MobilePhone $_.MobilePhone -Pager $_.Pager -HomePhone $_.HomePhone -Company $_.Company -CountryOrRegion $_.CountryOrRegion -Title $_.Title -Department $_.Department -Fax $_.Fax -Initials $_.Initials -Notes $_.Notes -Office $_.Office } if ($_.Manager) { Set-Contact -Identity $_.Name -StreetAddress $_.StreetAddress -City $_.City -StateOrProvince $_.StateOrProvince -PostalCode $_.PostalCode -Phone $_.Phone -MobilePhone $_.MobilePhone -Pager $_.Pager -HomePhone $_.HomePhone -Company $_.Company -CountryOrRegion $_.CountryOrRegion -Title $_.Title -Department $_.Department -Fax $_.Fax -Initials $_.Initials -Notes $_.Notes -Office $_.Office -Manager $_.Manager } #### Hide or show the DistributionGroup in the Global Address List if ($_.Hidden) { [boolean] $StoreBool = [System.Convert]::ToBoolean($_.Hidden) Set-MailContact $_.Name -HiddenFromAddressListsEnabled $StoreBool } } #### Stop Logging Stop-Transcript #### Logoff Logoff
Copy and paste the code in notepad (for example) and save it as “CreateExternalContacts.ps1”. Go through the following steps to use the script.
Steps
- Make sure you have the following tools installed before running the script:
Microsoft Online Services Sign-In Assistant (IDCRL7) – 32 bit version
Microsoft Online Services Sign-In Assistant (IDCRL7) – 64 bit version
Microsoft Online Services Module for Windows PowerShell (32-bit version)
Microsoft Online Services Module for Windows PowerShell (64-bit version)
See: http://onlinehelp.microsoft.com/Office365-enterprises/ff652560.aspx - Run the “CreateExternalContacts.ps1” script from this window.
- You will be asked to logon to Office 365. Use you an Administrator account for this login.
- Next you will be asked for the CSV file. Browse to the appropriate file and click OK.
- A log file will be created with the CSV file name and is given the extension.log.
This is part 5 of a series of posts about some PowerShell scripts I created or used and modified for some Office 365/Exchange Online migrations.
In the final part (6) of this series I will share a script which can be used to assign a license to users based on group membership.
An overview of the series can be found here.
Leave a Reply