Замена лицензий в Office 365 на PowerShell (STANDARDWOFFPACK_IW_STUDENT вместо STANDARDWOFFPACK_STUDENT и OFFICESUBSCRIPTION_STUDENT)

Дано: корпоративный Office 365 с несколькими тысячами пользователей. В нашем случае они еще синхронизируются с локальным AD через DirSync. У большинства пользователей (это студенты) назначено две лицензии STANDARDWOFFPACK_STUDENT и OFFICESUBSCRIPTION_STUDENT со всем включенными планами.

Задача: заменить эти две лицензии на одну STANDARDWOFFPACK_IW_STUDENT без потери пользовательских данных.

Предыстория (почему возникла такая задача?). 

Лицензии:
STANDARDWOFFPACK_IW_STUDENT - Office 365 Education Plus for students (до 01.09.2015г. называлась "Office 365 для образования ‎(студенческий)‎")
STANDARDWOFFPACK_STUDENT - Office 365 Education for students (до 01.09.2015г. называлась "Office 365 для образования E1 ‎(студенческий)"‎)
OFFICESUBSCRIPTION_STUDENT - Office 365 профессиональный плюс для учащихся

Лицензия STANDARDWOFFPACK_STUDENT дает право на почтовый ящик, работу в SharePoint, Skype.
Лицензия OFFICESUBSCRIPTION_STUDENT дает право бесплатно поставить пакет MS Office, OneDrive.
Новая лицензия STANDARDWOFFPACK_IW_STUDENT объединяет в себе возможности первых двух. Хотя в ней явно не указана возможность использования "OneDrive для бизнеса", такая возможность есть. Не могу говорить о полной взаимозаменяемости этих лицензий, но все те функции, которыми пользовались наши сотрудники сохранились. Единственное в чём есть сомнение, так это в том, что данная лицензия вдруг не исчезнет также, как появилась (см. историю о ее появлении тут). В подписках она не фигурирует как остальные лицензии, никаких сроков ее использования также не указано.
В принципе мы бы не делали эту замену, однако возникла ситуации, когда у лицензии OFFICESUBSCRIPTION_STUDENT срок начал подходить к концу и был риск просрочить продление, при этом пользователи могли потерять свои активации Office. Поэтому было принято решение массово перенести их на новую лицензию.

ВАЖНО! Если лицензии взаимозаменяемые, то ни в коем случае нельзя заменять лицензии отдельными операциями. Нельзя сначала удалить лицензию, а потом другой операцией (или командой) добавить новую. Есть вероятность потерять данные пользователя.

Сделать наоборот нельзя, т.к. Office 365 не даст назначить еще одну лицензию с уже имеющимися планами. Например, нельзя сначала добавить лицензию STANDARDWOFFPACK_IW_STUDENT, т.к. входящие в нее планы уже назначены в лицензии STANDARDWOFFPACK_STUDENT. Но если сначала удалить STANDARDWOFFPACK_STUDENT, а потом добавить STANDARDWOFFPACK_IW_STUDENT, то пользователь с большой вероятностью потеряет всё содержимое ящика.

Т.е. замену лицензий нужно делать ОБЯЗАТЕЛЬНО одной операцией (командой).

Решение задачи

Если пользователей не много, то можно это сделать вручную через Центр Администрирования Office 365 (Выбор пользователя - блок Лицензии - Изменить). Выбираем нужную лицензию, снимаем "галки" с не нужных и сохраняем:


После сохранения у пользователя в поле почтового ящика будет сообщение о том, что для него подготавливается ящик - не пугайтесь, через пару минут ящик пользователя со всеми данными будет на месте.

Т.к. в нашем случае пользователей более 6-ти тысяч, данную операцию лучше сделать при помощи скрипта PowerShell.

Следующая команда делает замену всем пользователям сразу:
Get-Msoluser -All | Set-MsolUserLicense -AddLicenses 
orgname:STANDARDWOFFPACK_IW_STUDENT 
-RemoveLicenses orgname:STANDARDWOFFPACK_STUDENT, 
orgname:OFFICESUBSCRIPTION_STUDENT 

Команда добавляет новую лицензию и сразу же удаляет предыдущие, потери данных не происходит.
Вместо orgname в команде вставьте название вашего тенанта. Как его узнать? Можно выполнить следующую команду:
Get-MsolAccountSku

Также указанную выше команду следует сделать, если при попытке назначить лицензию возникла ошибка:
Set-MsolUserLicense : The license "orgname:STANDARDWOFFPACK_IW_STUDENT is not valid.  To find a list of valid licenses, please call the Get-MsolAccountSku cmdlet.


Также проверить правильность написания имени лицензии в команде можно так:
$license = "orgname:STANDARDWOFFPACK_IW_STUDENT"
Get-MsolAccountSku | where {$_.AccountSkuId -eq $license}

Т.к. нам не требуется назначать новую лицензию всем подряд, то необходимо сделать выборку, только пользователей, имеющих лицензии STANDARDWOFFPACK_STUDENT и OFFICESUBSCRIPTION_STUDENT.

Пример получения списка пользователей по определенной лицензии:
Get-MsolUser -All | select DisplayName, Licenses | 
Where-Object {$_.Licenses.AccountSkuID -eq "orgname:OFFICESUBSCRIPTION_FACULTY"}

В результате у меня получился следующий скрипт:
$UsersList = Get-MsolUser -All | Where-Object { $_.LastDirSyncTime -ne $null }
$cnt = 0
$cntAll = 0
Foreach ($UserItem in $UsersList)
{
$cntAll += 1
 $Username = $UserItem.UserPrincipalName
 $licensedetails = $UserItem.Licenses
 $HasOffice = $false
 $HasSP = $false
 if ($licensedetails.Count -gt 0){
   foreach ($i in $licensedetails){
      $LicenseName = $i.AccountSkuId    
      If ($LicenseName -eq 'orgname:OFFICESUBSCRIPTION_STUDENT') 
        { $HasOffice = $true }
      If ($LicenseName -eq 'orgname:STANDARDWOFFPACK_STUDENT') 
        { $HasSP = $true }
   }
 }
If ($HasOffice -eq $true -And $HasSP -eq $true) {
Write-Host $Username
$cnt += 1
Set-MsolUserLicense -UserPrincipalName $Username -AddLicenses 
orgname:STANDARDWOFFPACK_IW_STUDENT 
-RemoveLicenses orgname:STANDARDWOFFPACK_STUDENT, 
orgname:OFFICESUBSCRIPTION_STUDENT
}
}
 Write-Host " Сделано замен - $cnt"
 Write-Host " Всего пользователей - $cntAll"

Фильтром Where-Object { $_.LastDirSyncTime -ne $null } я получаю только пользователей, синхронизируемых с AD (см. также - http://www.e-du.ru/2015/03/office-365-get-list-non-sync-user.html)

(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет :

Отправить комментарий