Office365 - удаление нескольких лицензий одновременно не работает должным образом - PullRequest
0 голосов
/ 10 июля 2019

Я работаю над сценарием, который соединяет среду O365 и удаляет лицензии.

Теперь мне нужно удалить несколько лицензий, которые больше не относятся к пользователю. И список лицензий такого типа будет присутствовать в строковой переменной.

Если я знаю название лицензий перед этим, команда будет выглядеть так:

Set-MsolUserLicense -UserPrincipalName "ID_TestB@lic.com" -RemoveLicenses "liconline:DESKLESSPACK","liconline:OFFICESUBSCRIPTION";

Приведенная выше команда удалит две лицензии, а именно desklesspack и офисную подписку для использования ID_TestB@lic.com ( обратите внимание на двойные кавычки в каждом имени лицензии )

Но это не так, как я хочу, чтобы это было динамичным, когда я буду передавать лицензии непосредственно переменной

Итак, теперь, если я собираю эти лицензии в переменную, скажем, $ license, где $ license -

$license="`"liconline:DESKLESSPACK`",`"liconline:OFFICESUBSCRIPTION`""

обратные кавычки являются escape-символом в powershell, поэтому я избегаю двойных кавычек, которые должны быть частью текста при помощи обратного кавычка

Теперь, если я использую это

Set-MsolUserLicense -UserPrincipalName "ID_TestB@lic.com" -RemoveLicenses $license;

это выдает ошибку

Set-MsolUserLicense: невозможно назначить эту лицензию, потому что она недействительным. Используйте командлет Get-MsolAccountSku, чтобы получить список допустимых лицензии.

Я тоже пытался сделать это так:

$license1 = "liconline:DESKLESSPACK";
$license2 = "liconline:OFFICESUBSCRIPTION";
Set-MsolUserLicense -UserPrincipalName "ID_TestB@licent.com" -RemoveLicenses $license1, $license2;

который сработал.

опять же, это не динамический подход, поскольку может случиться так, что существует более двух лицензий.

Если у кого-то есть идеи, с помощью которых это может работать, пожалуйста, помогите. Также я не хочу разбивать строку и повторять цикл for

1 Ответ

0 голосов
/ 11 июля 2019

Кажется, я поступил неправильно.

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

Таким образом, решение этого будет:

$license="licentonline:DESKLESSPACK","licentonline:OFFICESUBSCRIPTION"
#powershell will automatically convert above string to an array
Set-MsolUserLicense -UserPrincipalName "ID_TestB@licent.com" -RemoveLicenses $license;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...