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.

Wednesday, 19 August 2015

Office 365 - Updating all users password at a time

Hi All,
 
Background:
 
We have scenario like, in our project we have to give customers sample users for testing our SharePoint online site. We need to give around 50+ users to customer for testing. 
 
So in office 365 we have option to create bulk users, we can have .csv file and we can upload it from admin portal as 
 
Fig 1: Office 365 - Bulk user option
 
So we have prepared our users.csv file and uploaded and with few steps our users are created successfully. Everything fine till the time :). So for all these users Office 365 generated random password. Then for every user while first time log in need to change the password. 
But our customer requirement is all users must have same password and when they log in then no need to ask for change. 
 
Approaches: There are two possible approaches for this
 
1. Create the users using bulk user option as shown in above figure and then set the same password for all the users. 
 
2. We can set the password while creating the users
For above both he approaches we will need to install Microsoft Online Services Sign-in Assistant and Windows Azure AD Module for Windows PowerShell (Pleas look at reference section for more details of these tools)
 
Open Windows Azure AD Module for Windows PowerShell and execute following cmdlet
 
Connect-MsolService 
 
You will get the pop up to ask the credentials for connecting the Office 365 site as 
 
Fig 2: Credential Pop up 
 
Let’s keep our .csv file ready having column “UserName”. We are ready to execute the commands and lets consider both the approaches
 
1. Update the password for all the users which are created : Execute the following command
 
Import-Csv "D:\Users.csv"|%Set-MsolUserPassword -UserPrincipalName $_.UserName -NewPassword "abcd@123" -FoceChangePassword $false}
 
2. Set the password while creating the users
 
Import-Csv “D:\Users.csv” | Foreach-Object {New-MsolUser -UserPrincipalName  $_. UserName -DisplayName $_.DisplayName -Password  "abcd@123" } 
 
References:
1. Microsoft Online Services Sign-in Assistant: MOS SIA provides sign – in capabilities to Microsoft Online services like Office 365. The MOS SIA installs client components that allow desktop applications like “Windows Azure AD Module for Windows PowerShell” to authenticate to Microsoft Online Services. 
 
 
 
 
Thanks!
 
Enjoy Reading J
 
Please free to comment / suggestions / Feedback J