There isn't much to be found about this.
I needed to move a list of users from our on-premises Skype for Business 2015 servers to Skype Online.
I know how to do this one user at a time.
$cred = Get-Credential username@tenanant.com
Move-CsUser -Identity UPN -Credential $cred -Target sipfed.online.lync.com -Confirm:$false
Thats nice and all, but I had a list of 15 users.
I came across this post from Brett Janzen:
He deserves a shit load of traffic to his site for this strike of genius :-)
He created a script to move users from on-premises to Online, to check if they are enabled if the move went well or not and notify you of this by email.
His version can be found
here, I made some adjustments because my environment reacted a bit differently.
# Edit this script at lines: 4, 13, (possibly at 17), 23, 32, 46, 51 and 58 to 61
#This 1 liner creates the hash file that we will need in the next script. Needs to be run only the first time, or if password changes
Read-Host -Prompt "Enter your tenant password" -AsSecureString | ConvertFrom-SecureString | Out-File "cred.txt"
#-------------------------
#Script starts here:
#-------------------------
#Time Stamp used for file naming
$DTStamp = get-date -f "dd-MM-yyyy HH-mm"
#This uses a hash value of the password for the service user. This will allow us to run the script with out being asked
$AdminName = "username@tenant.onmicrosoft.com"
$Pass = Get-Content "cred.txt" | ConvertTo-SecureString
$credential= new-object -typename System.Management.Automation.PSCredential -argumentlist $AdminName, $Pass
#Initialize session
$session = New-CsOnlineSession -Credential $credential #-OverrideAdminDomain "domain.com"
Import-PSSession $session -AllowClobber
Set-ExecutionPolicy Unrestricted -force
#The Beginning of the inspection of users that will be moved
#Does the userlist file exist?
If ((test-path "userlist.txt") -eq $False) {
Send-MailMessage -from "Skype@domain.com" -to "admin@domain.com"-subject "Skype Migrations: No File" -body "Looks like we dont have a file to work with" -smtpServer smtp.domain.com
}else{
#check to see if the users are enabled. This will output new file for working with.
ForEach ($UserToBeMigrated in (Get-Content userlist.txt)) {
get-csuser $UserToBeMigrated | Where-object {$_.Enabled -eq $False} | Select-object -expandProperty sipaddress | Out-File NotEnabledUsers.txt -append
get-csuser $UserToBeMigrated | Where-object {$_.Enabled -eq $True} | Select-object -expandProperty sipaddress | Out-File EnabledUsers.txt -append
}
#Start of moving users to the cloud with enabledusers.txt
ForEach ($UserToBeMigrated in (Get-Content EnabledUsers.txt)) {
Move-CsUser $UserToBeMigrated -Target sipfed.online.lync.com -Credential $credential -Confirm:$False #-verbose #-HostedMigrationOverrideUrl "https://youradmindomainname.online.lync.com/HostedMigration/hostedmigrationservice.svc" -ProxyPool "proxypool.domain.com"
}
# Lets give it a pause for any replication delays
Start-Sleep 60
#Lets verify the users where migrated
ForEach ($UserToBeMigrated in (Get-Content EnabledUsers.txt)) {
Get-CsUser $UserToBeMigrated | where-object {$_.hostingprovider -ne "sipfed.online.lync.com"} |Select-object -ExpandProperty Sipaddress | out-file LeftOvers.txt -Append
}
#If there were users that didnt move it will show up in the left overs file
If ((Get-Content "LeftOvers.txt") -eq $Null) {
ForEach ($UserToBeMigrated in (Get-Content EnabledUsers.txt)) {
get-csuser $UserToBeMigrated | select-object SipAddress, HostingProvider | Out-file completedList.txt -append
}
#If it passes lets send an email to the admin with some txt files to look through if he or she wants to
Send-MailMessage -from "Skype@domain.com" -to "admin@domain.com" -subject "Move Complete" -body "Passed on first try. Logs attached" -Attachment "CompletedList.txt","NotEnabledUsers.txt" -smtpServer smtp.domain.com
#Cleanup!
rename-item -path completedList.txt -newName "CompletedList- $DTStamp.txt"
} else {
#If there is failure email and let the admin know
Send-MailMessage -from "Skype@domain.com" -to "admin@domain.com" -subject "Move Had Errors" -body "Looks like there was a failure. Logs attached" -attachment "LeftOvers.txt" -smtpServer smtp-lb.domain.com
#Here we could add another try to see if we can move the users again. This is a work in progress
}
}
#Close them sessions
get-pssession | remove-pssession
#Clean Up
rename-item -path "D:\Scripts\Move-CSUser to Skype Online\leftovers.txt" -newName "_LeftOvers- $DTStamp.txt"
rename-item -path "D:\Scripts\Move-CSUser to Skype Online\userlist.txt" -newName "_UserList- $DTStamp.txt"
rename-item -path "D:\Scripts\Move-CSUser to Skype Online\NotEnabledUsers.txt" -newName "_NotEnabledUsers- $DTStamp.txt"
rename-item -path "D:\Scripts\Move-CSUser to Skype Online\EnabledUsers.txt" -newName "_EnabledUsers- $DTStamp.txt"