Попытка установить пользовательские лицензии в Office 365 через Powershell

У меня есть арендатор Office 365 с несколькими планами лицензирования, и я пытаюсь массово отключить определенные функции плана E3 с помощью Powershell.

Вот что у меня есть:

$ENTERPRISEPACK=New-MsolLicenseOptions -AccountSkuId companyname:ENTERPRISEPACK -DisabledPlans "FLOW_0365_P2", "POWERAPPS_0365_P2"

Import-CSV c:\scripts\inputfiles\e3users.csv | foreach-object -process { Set-MsolUserLicense -UserPrincipalName $_.upn -LicenseOptions $ENTERPRISEPACK -Verbose}

Проблема, с которой я сталкиваюсь, заключается в том, что я могу проверить существование пользователей и импортировать CSV как действительный, но я получаю сообщение об ошибке для каждого пользователя в моем CSV:

Set-MsolUserLicense : User Not Found.  User: .

Это довольно неприятно, так как я хочу отключить функции только для всех пользователей E3 (которые будут в моем CSV), и эта команда работает, когда вы запускаете ее как:

$ENTERPRISEPACK=New-MsolLicenseOptions -AccountSkuId companyname:ENTERPRISEPACK -DisabledPlans "FLOW_0365_P2", "POWERAPPS_0365_P2"

Set-MsolUserLicense -UserPrincipalName [email protected] -LicenseOptions $ENTERPRISEPACK -Verbose

Как видите, разница здесь в том, что я запускаю его с одним введенным именем пользователя.

Для меня просто имеет смысл, что я смогу передать его ввод и запустить цикл, но я что-то упускаю.

Пожалуйста помоги?


person user1681573    schedule 14.04.2017    source источник


Ответы (1)


Я смог разобраться в этом самостоятельно.

К сожалению, часть номер 1 заключается в том, что «Set-MSOLUserLicense» принимает входные данные конвейера для имен участников-пользователей только из текстового файла, а не из CSV.

Во-вторых, по какой-то странной причине планы обслуживания, которые я пытаюсь отключить, не распознаются при использовании двойных кавычек.

Вот что у меня получилось:

$ENTERPRISEPACK=New-MsolLicenseOptions -AccountSkuId company:ENTERPRISEPACK -DisabledPlans 'FLOW_O365_P2','POWERAPPS_O365_P2','RMS_S_ENTERPRISE'

Get-Content "C:\scripts\inputfiles\E3users.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $ENTERPRISEPACK

И, поскольку переключатель -Verbose не работал, я добавил блок сценария, чтобы отключить ведение журнала. Итак, команда и блок логирования выглядят так:

Get-Content "C:\scripts\inputfiles\E3users.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $ENTERPRISEPACK -ea silentlycontinue -ev +action


# if there were no errors, write to the screen and file what was done
if($action.count -eq 0)
{
 Write-Host -ForegroundColor Green "Changed license for" $_
 Write-output $_ | Out-File C:\scripts\OutputFiles\FeatureDisable\logs\LicenseSuccesslogEnterprise04072017.csv -Append
}
# if the initial command failed, then write to a failure logfile 
if($action.count -eq 1)
{
 Write-Host -foreground Yellow "Failed to change license for" $_
 Write-Output $_ | out-file C:\scripts\OutputFiles\FeatureDisable\logs\LicenseFailurelogEnterprise04072017.csv -Append
}
Clear-Variable -Name action}
person user1681573    schedule 14.04.2017