我有一个Office 365租户,其中包含多个许可计划,我试图通过Powershell批量停用E3计划的某些功能。
这就是我所拥有的:
$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 testuser.here@domain.com -LicenseOptions $ENTERPRISEPACK -Verbose
正如您所看到的,这里的不同之处在于我使用一个专门输入的用户名来运行它。
对我来说,我能够管道输入并运行循环,这是有道理的,但我错过了一些东西。
请帮帮忙?
答案 0 :(得分:0)
我能够自己解决这个问题。
令人沮丧的是,第1号是" Set-MSOLUserLicense"仅接受文本文件中UPN的管道输入,而不接受CSV。
其次,由于一些奇怪的原因,我尝试禁用的ServicePlans在使用双引号时似乎无法被识别。
这就是我最终的结果:
$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}