Forum Discussion
Moving users from Skype for Business On-Prem to Teams get-cspowershellendpoint error
https://seanmcavinue.net/2020/10/27/powershell-script-to-migrate-users-from-skype-on-premises-to-microsoft-teams/
Also check your internet settings and make sure if you are using a proxy to account for that as per:
http://woshub.com/using-powershell-behind-a-proxy/
Hello!
I am able to move the users from Skype but id like to use the following commands but I keep getting the following errors I'm not sure why.
My script looks like this below.
Up until the "upgrade to teams" part it works fine it does what it's supposed to do.
The last 5 lines give me the following error (second code snippet)
My CSV is really simply it looks like this (third code snippet)
I also tried to add -Identity before $._Dialplan / $_.Region and so on in my code which still does not work.
Any ideas why this won't work?
$Users = Import-Csv “Path to my script.csv”
$sip= $users.SipAddress
Import-Module SkypeOnlineConnector
$session = New-CsOnlineSession -OverrideAdminDomain "mydomain.onmicrosoft.com"
Import-PSSession -Session $session -AllowClobber
Move-CsUser -Identity $sip -Credential $Cred -Target sipfed.online.lync.com -ProxyPool "whatevermypoolis.domain.com" -Confirm:$true
Import-Csv -Path "Path to my script.csv" | ForEach-Object {Grant-CsTeamsUpgradePolicy -Identity $_.SipAddress -PolicyName UpgradeToTeams}
Import-Csv -Path "Path to my script.csv" | ForEach-Object {Grant-CsTenantDialPlan $_.DialPlan -PolicyName DialPlan-Global}
Import-Csv -Path "Path to my script.csv" | ForEach-Object {Grant-CsOnlineVoiceRoutingPolicy $_.Region -PolicyName mypolicyname}
Import-Csv -Path "Path to my script.csv" | ForEach-Object {Grant-CsTeamsCallingPolicy $_.AllowCalling -PolicyName Tag:AllowCalling}
Import-Csv -Path "Path to my script.csv" | ForEach-Object {Set-CsUser $_.Tel -EnterpriseVoiceEnabled $true -HostedVoiceMail $true -OnPremLineURI "tel:+9999"}
Import-Csv -Path "Path to my script.csv" | ForEach-Object {Get-CsOnlineUser $_.Identity Select-Object UserPrincipalName,DisplayName,EnterpriseVoiceEnabled,HostedVoiceMail,OnPremLineURI,OnlineVoiceRoutingPolicy,TeamsCallingPolicy,TeamsUpgradePolicy}
Cannot validate argument on parameter 'Identity'. The argument is null or empty. Provide an argument that is not null or empty, and then try the
command again.
+ CategoryInfo : InvalidData: (:) [Grant-CsTenantDialPlan], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Rtc.Management.AD.Cmdlets.AssignOcsTenantDialPlanCmdlet
+ PSComputerName : admin1a.online.lync.com
Cannot validate argument on parameter 'Identity'. The argument is null or empty. Provide an argument that is not null or empty, and then try the
command again.
+ CategoryInfo : InvalidData: (:) [Grant-CsOnlineVoiceRoutingPolicy], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Rtc.Management.Xds.GrantOnlineVoiceRoutingPolicyCmdlet
+ PSComputerName : admin1a.online.lync.com
Cannot validate argument on parameter 'Identity'. The argument is null or empty. Provide an argument that is not null or empty, and then try the
command again.
+ CategoryInfo : InvalidData: (:) [Grant-CsTeamsCallingPolicy], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Rtc.Management.Xds.GrantTeamsCallingPolicyCmdlet
+ PSComputerName : admin1a.online.lync.com
Cannot bind argument to parameter 'Identity' because it is null.
+ CategoryInfo : InvalidData: (:) [Set-CsUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.Rtc.Management.AD.Cmdlets.SetOcsUserCmdlet
+ PSComputerName : admin1a.online.lync.com
A positional parameter cannot be found that accepts argument 'Select-Object'.
+ CategoryInfo : InvalidArgument: (:) [Get-CsOnlineUser], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.Rtc.Management.AD.Cmdlets.GetOcsUserCmdlet
+ PSComputerName : admin1a.online.lync.com
SipAddress DialPlan Region AllowCalling Tel Identity
name@domain.com Global Myregion Empty 9999 name@domain.com
- SeanMcAvinueMay 20, 2021MVP
Audi9112450 OK cool,
I've tidied up and fixed some of the code in your script, the below should work but I haven't gotten to test it our so hopefully no typos in there!
Import-Module SkypeOnlineConnector $session = New-CsOnlineSession -OverrideAdminDomain "mydomain.onmicrosoft.com" Import-PSSession -Session $session -AllowClobber $csv = import-csv "Path to my script.csv" ##Loop through all users in CSV foreach ($user in $csv) { ##Move User Move-CsUser -Identity $user.sipaddress -Credential $Cred -Target sipfed.online.lync.com -ProxyPool "whatevermypoolis.domain.com" -Confirm:$true ##Grant Upgrade Policy Grant-CsTeamsUpgradePolicy -Identity $user.SipAddress -PolicyName UpgradeToTeams ##Grant dial plan Grant-CsTenantDialPlan $user.SipAddress -PolicyName DialPlan-Global ##Grant VR Policy Grant-CsOnlineVoiceRoutingPolicy $user.SipAddress -PolicyName mypolicyname Grant-CsTeamsCallingPolicy $user.SipAddress -PolicyName Tag:AllowCalling Set-CsUser $user.SipAddress -EnterpriseVoiceEnabled $true -HostedVoiceMail $true -OnPremLineURI "tel:+9999" Get-CsOnlineUser $user.SipAddress | Select-Object UserPrincipalName, DisplayName, EnterpriseVoiceEnabled, HostedVoiceMail, OnPremLineURI, OnlineVoiceRoutingPolicy, TeamsCallingPolicy, TeamsUpgradePolicy }
One thing I've noticed, is the name of your VR policy "mypolicyname" or do you need to update that with the VR policy name?
- Audi9112450May 20, 2021Brass Contributor
That is fantastic. I'm going to try it now.
The policy line has a bit of a twist. We have two policies. For the sake of this thread I'll use it as Policy1 and Policy2
Ideally, I would want the script to pick the policy that is in the CSV and apply it. So it would look something like this (see below snippet)
Would I add anything in your cleaned up script for that to work or it should just work out of the box? I probably don't because the script is asking to loop through all the users in the CSV so it should automatically pick everything if I am understanding correctly.
##Grant VR Policy Grant-CsOnlineVoiceRoutingPolicy $user.SipAddress -PolicyName "Policy one" ##Grant VR Policy Grant-CsOnlineVoiceRoutingPolicy $user.SipAddress -PolicyName "Policy two"
Also, I noticed that your cleaned up script is a little different from mine. My CSV has these headers in the columns
A= SipAddress
B= DialPlan
C=Region
D=AllowCalling
E=Tel
F=Identity
Does this have any importance based off your current cleaned up version of my script? Again, as far as I can tell it shouldn't because of this line correct
##Loop through all users in CSV foreach ($user in $csv) {
Thank you a million times over for your help!
- SeanMcAvinueMay 20, 2021MVPOk, I would add in a column for "RoutingPolicy" in your CSV and then change the Routing policy line to:
Grant-CsOnlineVoiceRoutingPolicy $user.SipAddress -PolicyName $user.routingpolicy
If you add two lines as in your post it will set one and then the other for everyone