Thursday, 27 August 2015

Office 365 - PowerShell script to verify if user is already exist if not then creating new user


Hi All,

Background:
We have Office 365 setup for our one of the customer. There were around 1000+ already users. Customer has given new list of users which need to add to office 365. But the problem is, in that list there were already few users which already exists. So we need to write a PowerShell script which already check if users is already exists, if not then add new user. 

We can directly upload excel to office 365 and excluding existing users, new users will be created but our customer also want the different passwords for the new users and don't want to change when they will login first time. If we specify password column to excel, Office 365 doesn't accepts it. Office 365 shows following result:

 Fig 1 : Office 365 result when we upload excel with Password column.

If we view log file it shows following error:

 Fig 2 : Log File showing error

So we don't have option except writing PowerShell script.

Solution:
Initially my thought was that its very easy job since we could easily create new users with the password we want using -Password and -ForceChangePassword option as $false as 

Import-Csv “D:\Users.csv” | Foreach-Object {New-MsolUser -UserPrincipalName  $_. UserName -DisplayName $_.DisplayName -Password  $_.Password -ForceChangePassword $false

But for me it took some time to verify whether user is already exists or not thorough PowerShell and so this article comes :)

Following are steps: (If you are newbie, please read my previous blog - Office 365 - Updating all users password at a time)


1. Set the Path of users excel file
 $path = "D:\Users.csv" 

2. Connect to Office 365 as 
 $cred=Get-Credential
  Connect-MsolService -Credential $cred 

3. Check if user is already exists :
 Get-MsolUser -UserPrincipalName $_.UserName -ErrorAction SilentlyContinue -ErrorVariable errorVariable

The above command is very important, Get-MsolUser get the existing users based on user name. Important parameters are -ErrorAction and -ErrorVariable. If given user is not exists then this command throws an exception but since we are executing command with SilentlyContinue option, it doesn't break the flow and error is copied in error variable “errorVariable” which we specified with ErrorVariable parameter. So here we have chance to check the errorVariable whether it is null or contains an error. If it is null it means user is not exists as 

 Import-Csv $path | Foreach-Object { 
if($errorVariable -ne $null){
       Write-Host "Creating new user"
       New-MSOLUser -UserPrincipalName  $_.UserName -DisplayName $_.DisplayName -Password  $_.Password -FirstName $_.FirstName -LastName $_.LastName -Department $_.Department -City $_.City -Country $_.Country_or_Region -MobilePhone $_.MobilePhone -PhoneNumber $_.OfficePhone -State $_.State_or_Province -StreetAddress $_.Address -Title $_.JobTitle  -Office $_.OfficeNumber -Fax $_.Fax -PostalCode $_.ZIP_or_Postal_Code -ForceChangePassword $false -ErrorVariable errorVariable 
              
   }
  else{
          Write-Host "User already exists : " $_.UserName
       } 
}#Foreach-object


References:

Thanks!

Enjoy Reading :)

Any feedback / suggestions / comment always welcome.

2 comments:

Sumit said...

Thanks you Sir for Sharing this article. :-)

Sumit said...
This comment has been removed by the author.