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 comment