使用 Office 365 PowerShell 指派授權至使用者帳戶

 

適用版本:Office 365 Enterprise, Office 365 Midsize Business, Office 365 Small Business

上次修改主題的時間:2017-05-17

說明如何使用 Office 365 PowerShell 將 Office 365 授權指派給未經授權的使用者。

在 Office 365 中進行使用者帳戶授權非常重要,因為直到使用者帳戶獲得授權,使用者才可 Office 365 服務。您可以使用 Office 365 PowerShell 有效率地將授權指派給未經授權的帳戶 (尤其是多個帳戶時)。

內容:

簡短版本 (不含說明的指示)

冗長版本 (包含詳細說明的指示)

另請參閱

  • 本主題中的程序需要您連線到 Office 365 PowerShell。如需詳細指示,請參閱 連線至 Office 365 PowerShell

  • 使用 Get-MsolAccountSku Cmdlet,以檢視您組織中可用的授權計劃以及每個計劃中可用的授權數目。每個計劃中可用的授權數目為 ActiveUnits - WarningUnits - ConsumedUnits。如需授權計劃、授權及服務的相關資訊,請參閱使用 Office 365 PowerShell 檢視授權與服務

  • 若要尋找組織中未經授權的帳戶,請執行命令 Get-MsolUser -All -UnlicensedUsersOnly

  • 您只能將授權指派給 UsageLocation 屬性設定為有效 ISO 3166-1 alpha-2 國碼的使用者帳戶。例如,US 代表美國、FR 代表法國。在特定國家/地區,某些 Office 365 服務無法使用。如需詳細資訊,請參閱有關授權限制

    若要尋找沒有 UsageLocation 值的帳戶,請執行命令 Get-MsolUser -All | where {$_.UsageLocation -eq $null}。若要設定帳戶的 UsageLocation 值,請使用語法 Set-MsolUser -UserPrincipalName "<Account>" -UsageLocation <CountryCode>。例如,Set-MsolUser -UserPrincipalName "belindan@litwareinc.com" -UsageLocation US

  • 如果您使用 Get-MsolUser Cmdlet,而不使用 All 參數,則只會傳回前 500 個帳戶。

本節僅呈現程序,但不提供詳盡或多餘的說明。如果您有任何問題或需要詳細資訊,您可以閱讀本主題的其餘部分。

若要將授權指派給使用者,請在 Office 365 PowerShell 中使用下列語法:

Set-MsolUserLicense -UserPrincipalName "<Account>" -AddLicenses "<AccountSkuId>"

本範例會將 litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) 授權計劃中的授權指派給未經授權的使用者 belindan@litwareinc.com

Set-MsolUserLicense -UserPrincipalName "belindan@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"

若要將授權指派給多位未經授權的使用者,請使用下列語法:

$x = Get-MsolUser -All -UnlicensedUsersOnly [<FilterableAttributes>]; $x | foreach {Set-MsolUserLicense -AddLicenses "<AccountSkuId>"}

附註

  • 您無法將多個授權指派給相同授權計劃中的使用者。

  • 如果您沒有足夠的可用授權,則會依 Get-MsolUser Cmdlet 傳回授權的順序,將授權指派給使用者,直到可用的授權用完為止。

本範例會將 litwareinc:ENTERPRISEPACK (Office 365 Enterprise E3) 授權計劃中的授權指派給所有未經授權的使用者。

$AllUn = Get-MsolUser -All -UnlicensedUsersOnly; $AllUn | foreach {Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"}

本範例會將相同的授權指派給美國境內銷售部門中未經授權的使用者。

$USSales = Get-MsolUser -All -Department "Sales" -UsageLocation "US" -UnlicensedUsersOnly; $USSales | foreach {Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"}

回到頁首

使用 Office 365 PowerShell 檢視經授權與未經授權的使用者 一文所述,僅具備有效 Office 365 使用者帳戶、但未獲得 Office 365 授權的使用者,是有可能存在的。這表示,無論是否具備有效帳戶,此類使用者都無法登入 Office 365。如果您無法登入,您就無法使用任何 Office 365 服務。

前述文章也提到,我們可以執行下列命令,以傳回未授權的使用者帳戶清單:

Get-MsolUser -All -UnlicensedUsersOnly

此命令會傳回關於目前尚未完成 Office 365 授權的任何使用者資訊:

UserPrincipalName           DisplayName                     isLicensed
-----------------           -----------                     ----------
BelindaN@litwareinc.com     Belinda Newman                  False

如您所見,我們有一位未授權的使用者:Belinda Newman。那麼,我們要如何指派 Office 365 授權給 Belinda?

首先,我們將要執行使用 Office 365 PowerShell 檢視授權與服務一文中討論的 Get-MsolAccountSku Cmdlet:

Get-MsolAccountSku

此命令會傳回如下的資料:

AccountSkuId               ActiveUnits    WarningUnits   ConsumedUnits
------------               -----------    ------------   -------------
litwareinc:ENTERPRISEPACK  25             0              24

我們為什麼要執行 Get-MsolAccountSku?(您可能會想知道 "Sku" 是什麼,它是 "stock-keeping unit" (庫存單位) 的簡稱。以我們的目的來說,這只是商務上代表「產品」的用語。)我們之所以執行 Get-MsolAccountSku,有兩個原因。第一,我們必須確定我們真的有可以指派給 Belinda 的授權。我們有任何授權可以指派給她嗎?為了確認這一點,我們取用了 ActiveUnits 屬性的值 (25),並減去 WarningUnits (0) 和 ConsumedUnits (24) 屬性的值:

25 - 0 - 24 = 1

ActiveUnits 內容可指出我們已購買的授權數,而 WarningUnitsConsumedUnits 的加總值則指出目前使用中的授權數。如果我們從已購買的授權數中扣除已被取用的授權數,即可得知還有多少個授權可供使用。很湊巧,我們有一個授權可供配送:

25 - 0 - 24 = 1

其次,為了指派新授權給 Belinda,我們需要知道我們的授權方案名稱 (也就是說,我們需要知道 AccountSkuId)。在這例中,相當容易:我們只有一個授權方案 (litwareinc:ENTERPRISEPACK)。但請注意,一個組織可能會有多個授權方案。在該情況下,Get-MsolAccountSku 會傳回兩個不同的 AccountSkuIds,而您必須在指派授權時挑選適當的授權方案。不過,現在,我們將繼續使用最簡單的案例,就是假設我們只有一個授權方案。

那麼,我們要如何指派新授權給 Belinda Newman?如下所示:

Set-MsolUserLicense -UserPrincipalName "BelindaN@litwareinc.com" -AddLicenses "litwareinc:ENTERPRISEPACK"

這也是您必須執行的作業:呼叫 Set-MsolUserLicense Cmdlet,確定您為使用者指定 UserPrincipalName 參數和適當的授權計劃。

當設定 Set-MsolUserLicense 執行完成時,您將會在畫面上看到類似以下的內容:

PS C:\windows\system32>

換句話說,就是看起來好像什麼事情都沒發生。若要確認使用者是否已被指派授權,請執行類似以下的命令:

Get-MsolUser -UserPrincipalName "BelindaN@litwareinc.com"

如果一切都如預期般運作,您應該會看到 Belinda 的 isLicensed 屬性現在已設定為 True:

UserPrincipalName           DisplayName                     isLicensed
-----------------           -----------                     ----------
BelindaN@litwareinc.com     Belinda Newman                  True
安全性註記安全性 注意事項:
不錯的問題是:假如您犯了錯而嘗試將授權指派給已有授權的使用者,該怎麼辦?您最終會將兩個授權都給予一位使用者嗎?
快速答案是?不會;Office 365 不會讓您將多個授權指派給同一位使用者。(來自同一個授權方案的多個授權。)如果您嘗試這麼做,您的命令將會失敗並出現下列錯誤訊息:
Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve a list of valid licenses.
無可否認地,該錯誤訊息有一點誤導:該授權並非真的無效,只是被指派給已經「擁有」授權的使用者。但是,撇開錯誤訊息,重點是一個使用者最終不會擁有多個授權。

如您剛才所見,使用 Office 365 PowerShell 將單一授權指派給單一使用者非常容易。這會導向一個顯而易見的問題:使用 Office 365 系統管理中心 將單一授權指派給單一使用者是否也一樣容易,可能甚至更容易呢?有可能;在某種程度上,這需視您比較習慣使用 Windows PowerShell 或是比較習慣使用 Office 365 系統管理中心而定。不過,Windows PowerShell 真正出色的地方是在當您需要將多個授權給指派給多位使用者的時候。例如,這個命令會將 Office 365 授權指派給您任何一位尚未擁有授權的使用者:

Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

在先前的命令中,我們使用 Get-MsolUserUnlicensedUsersOnly 參數來傳回所有未授權使用者帳戶的集合。接著,我們將該集合傳遞給 Set-MsolUserLicense Cmdlet,Set-MsolUserLicense 進而會將授權 (取自 litwareinc:ENTERPRISEPACK 授權方案) 指派給集合中的每一位使用者。

但是,假如您有 5 個未授權的使用者,但只有一個可用的授權時,該怎麼辦?在此情況下,Set-MsolUserLicense 會將可用的授權給予 Get-MsolUser 所傳回的第一位使用者。Set-MsolUserLicense 將會盡責地嘗試指派授權給其他四位使用者,但是這四個嘗試全部都會失敗並出現下列錯誤訊息:

Set-MsolUserLicense : Unable to assign this license because the number of allowed licenses have been assigned.

換句話說,Set-MsolUserLicense 不會直接失敗。它會盡可能指派最多的權限。在這之後,才會失敗。

在此另外舉例說明。您可能會想要指派授權給業務部門的所有使用者。沒問題:

Get-MsolUser -All -Department "Sales" | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

或者,如果您想要再有技巧性一點,並且想要儘量減少錯誤訊息和運算處理,那就只要指派授權給業務部門中未授權的使用者即可:

Get-MsolUser -All -Department "Sales" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

畢竟,沒有必要嘗試授權給已經擁有授權的使用者。如我們所見,那樣做並沒有用。

以下是另一個範例。您可能會想要授權給所有目前尚未擁有 Office 365 授權的所有美國使用者。在該情況下:

Get-MsolUser -All -UsageLocation "US" -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses "litwareinc:ENTERPRISEPACK"

等等,依此類推。

註記注意事項:
執行命令 (例如將授權發給您的所有未授權使用者) 需要花費多久的時間?這很難說:這需視從您擁有的使用者數目到網路連線的種子等一切相關因素而定。如果您有幾百位使用者要授權,這會進行得相當快 (也就是不會花費超過一兩分鐘)。如果您有 10,000 位使用者要授權,則會明顯地多花一點時間。但是,絕對不會像使用 Office 365 系統管理中心將授權指派給 10,000 位使用者所花費的時間那樣長。

關於這個問題,以下是指派授權時所需注意的一些事項:如果針對 UsageLocation 內容,使用者並沒有已設定的值,您將無法指派 Office 365 授權給該使用者。取而代之的是,您會得到類似這樣的錯誤訊息:

Set-MsolUserLicense : You must provide a required property: Parameter name: UsageLocation

這個錯誤訊息是以稍微婉轉的方式告訴我們,目前討論中的使用者未被指派 UsageLocation。如您所猜想,UsageLocation 屬性 (指出使用者通常使用 Office 365 的地區或國家) 非常重要。為什麼?這是因為使用者可用的服務不僅取決於您所購買的授權套件,也取決於使用者所在的地方:由於當地規則與規定的緣故,有些服務可能無法供某些使用者使用。如果使用者沒有 UsageLocation,Office 365 就無法得知可對該使用者合法顯示哪些服務。因此,Office 365 也就無法提供任何服務給該使用者 (至少在已指定 UsageLocation 之前)。

註記注意事項:
當您設定使用者帳戶時,會立即得知是否有任何授權限制與這世界的特定部分關聯。例如,如果您將某個已授權之使用者的 UsageLocation 變更為 Iran (IR),命令將會失敗並出現這個錯誤訊息:
Set-MsolUser : Unable to update license for this user. One or more of the assigned service plans is not available in this user's country. Prohibited Service Plans: EXCHANGE_S_ENTERPRISE, SHAREPOINTENTERPRISE, SHAREPOINTWAC, MCOSTANDARD, OFFICESUBSCRIPTION, RMS_S_ENTERPRISE. Specific service plans can be disabled for a user by using the licenseoptions parameter.
這是因為 Office 365 目前無法供伊朗的使用者使用。如需詳細資訊,請參閱關於授權限制
順便一提,Office 365 使用國際標準組織 (ISO) 所產生的雙字母國碼 (地區碼)。您可以在 ISO 網站找到那些代碼。

如果您想要確認指定的使用者是否有 UsageLocation,您可以使用類似以下的命令:

Get-MsolUser -UserPrincipalName "BelindaN@litwareinc.com" | Select-Object UsageLocation

您也可以使用下列命令來傳回沒有 UsageLocation 的所有使用者清單:

Get-MsolUser -All | Where-Object {$_.UsageLocation -eq $null}
註記注意事項:
當您將授權指派給使用者時,根據預設,該使用者將會被授與您的組織有權存取的所有 Office 365 服務的存取權。例如,如果您已購買 Office 365 Enterprise E3 的授權,則您新授權的使用者將自動取得 Exchange Online、商務用 Skype Online 和 SharePoint Online 等服務的存取權。如果您想限定使用者對服務的存取權 (例如,您想讓使用者存取 SharePoint Online,但不想讓他存取 Exchange Online 和 商務用 Skype Online),請參閱使用 Office 365 PowerShell 停用服務存取權一文。

回到頁首

 
顯示: