使用 PowerShell 按 OU 批量許可 Office 365 使用者
我正在嘗試做一些我認為不應該太複雜的修復。我的最終目標:一個 AD OU 中的某些使用者需要在 Office 365 中使用某個許可證,而不同 OU 中的不同使用者需要獲得不同的許可證。
我想執行的命令是:
Get-ADUser -Filter * -SearchBase "ou=test,dc=our,dc=domain,dc=edu" | Set-MsolUserLicense -AddLicenses ourorg:STANDARDWOFFPACK_IW_STUDENT
但這失敗了,響應如下:
Set-MsolUserLicense : The input object cannot be bound because it did not contain the information required to bind all mandatory parameters: ObjectId At line:1 char:111 + Get-ADUser -Filter * -SearchBase "ou=Test students,ou=Students,dc=campus,dc=org,dc=edu" | Set-MsolUserLicense <<<< -AddLicenses nwcu:STANDARDWOFFPACK_IW_STUDENT
單獨地,這兩個命令都有效。我可以選擇 OU 中的所有使用者,也可以手動使用帶有 -UserPrincipalName 的 Set-MsolUserLicense 命令來許可單個使用者。
這是因為 Get-ADUser 沒有像 Set-MsolUserLicense 那樣返回 ObjectID 嗎?Get-ADUser 確實返回 ObjectGUID。如果我在正確的軌道上,有沒有辦法將這些映射在一起以用於管道輸入?
編輯:我知道這樣做的流行方法包括為此上傳一個 CSV 文件,我知道我可以 CSV 導出這些使用者,但我已經讓他們在 OU 中如此整潔,所以我很樂意這樣做如果可能的話,現在導入/導出。
提前致謝!
您肯定希望使用 for-each 循環來列舉每個使用者並應用許可證。循環需要從查詢中
.UserPrincipalName
返回的每個對像中呼叫Get-ADUser
,因為 Office365 在設置許可證時需要使用該值:Get-ADUser | %{ Set-MSOLUserLicense -UserPrincipalName $_.UserPrincipalName }
我在這裡創建了自己的答案來解釋我認為您在問題中描述的一個常見案例:您不想將相同的許可證選項一攬子應用到每個人。
關於這個問題的 TechNet 部落格非常有幫助。出於數據洩露的原因,您可能不想讓財務團隊訪問 SharePoint Online/OneDrive for Business,或者您可能擁有不想為 Lync/Skype for Business 啟用的呼叫中心。
要獲取有關您的租戶的資訊,請從頂部開始:
Get-MSOLAccountSku
這將返回您在租戶中擁有的許可證包。一些常見的 SKU 是 ENTERPRISEPACK 和 DESKLESSPACK。這些將
yourorg:LICENSEPACK
在 AccountSkuId 下列出。請務必注意,當您通過 PowerShell 申請時,這些許可證包中的每一個都可以禁用其中的功能(同樣,您可以選擇在管理中心中選中/取消選中選項框)。
要創建此許可證選項子集,請創建一個新變數並利用
New-MSOLLicenseOptions
cmdlet:$LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE
(上面的選項將對應於上面的螢幕截圖,我相信你可以猜到我完全從配置腳本中提取了它。)
最後,我們可以
Set-MsolUserLicense
在您的 ForEach 循環中將此與您聯繫起來:$LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE Get-ADUser | %{ Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses "yourorg:ENTERPRISEPACK" -LicenseOptions $LicOpt }
與往常一樣,您的租戶可能會有所不同。我希望我已經為您提供了足夠的資訊來發現可用的選項並適當地應用!