本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

使用 Office 365 PowerShell 檢視帳戶授權與服務詳細資料

 

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

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

說明如何使用 Office 365 PowerShell 來判斷已指派給使用者的 Office 365 服務。

在 Office 365 中,授權計劃中的授權 (也稱為 SKU 或 Office 365 計劃) 會授與使用者對這些計劃所定義的 Office 365 服務的存取權。不過,使用者可能無法存取目前指派給他們的授權中所有可用的服務。您可以使用 Office 365 PowerShell 來檢視使用者帳戶上的服務狀態。

內容:

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

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

另請參閱

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

  • 使用 Get-MsolAccountSku(Get-MsolAccountSku | where {$_.AccountSkuId -eq '<AccountSkuId>'}).ServiceStatus 命令來尋找下列資訊:

    • 您的組織可用的授權計劃。

    • 每個授權計劃中可用的服務,以及其列出的順序 (索引編號)。

    如需授權計劃、授權及服務的相關資訊,請參閱使用 Office 365 PowerShell 檢視授權與服務

  • 使用命令Get-MsolUser -UserPrincipalName <user account UPN> | Format-List DisplayName,Licenses尋找已指派給使用者的授權和所屬的順序列出 (索引編號)。

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

若要檢視使用者有權存取的所有 Office 365 PowerShell 服務,請使用下列語法:

(Get-MsolUser -UserPrincipalName <user account UPN>).Licenses[<LicenseIndexNumber>].ServiceStatus

此範例會顯示使用者 BelindaN@litwareinc.com 具有存取服務。這會顯示指派至她帳戶的所有授權與相關聯的服務。

(Get-MsolUser -UserPrincipalName belindan@litwareinc.com).Licenses.ServiceStatus

本範例顯示使用者 BelindaN@litwareinc.com 有權存取的服務,從指派給其帳戶的第一個授權 (索引編號為 0) 開始。

(Get-MsolUser -UserPrincipalName belindan@litwareinc.com).Licenses[0].ServiceStatus

若要尋找已啟用或未啟用特定服務的所有授權使用者,使用下列語法:

Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses[<LicenseIndexNumber>].ServiceStatus[<ServiceIndexNumber>].ProvisioningStatus <-eq | -ne> "Disabled" -and $_.Licenses[<LicenseIndexNumber>].ServiceStatus[<ServiceIndexNumber>].ProvisioningStatus <-eq | -ne> "Disabled"...}

這些範例使用下列資訊:

  • 對我們感興趣的 Office 365 服務提供存取權的授權,就是指派給所有使用者的第一個授權 (索引編號為 0)。

  • 我們感興趣的 Office 365 服務是商務用 Skype Online 和 Exchange Online。對於與授權計劃相關聯的授權,商務用 Skype Online 是第 6 個列出的服務 (索引編號為 5),而 Exchange Online 是第 9 個列出的服務 (索引編號為 8)。

本範例傳回已啟用商務用 Skype Online 和 Exchange Online 的的所有授權使用者。

Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[5].ProvisioningStatus -ne "Disabled" -and $_.Licenses[0].ServiceStatus[8].ProvisioningStatus -ne "Disabled"}

本範例傳回未啟用商務用 Skype Online 或 Exchange Online 的的所有授權使用者。

Get-MsolUser -All | where {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[5].ProvisioningStatus -eq "Disabled" -and $_.Licenses[0].ServiceStatus[8].ProvisioningStatus -eq "Disabled"}

回到頁首

務必做了明顯改善您知道哪些使用者已核發給Office 365授權及使用者尚未。(請參閱文章使用 Office 365 PowerShell 檢視經授權與未經授權的使用者如需詳細資訊)。不過,只要具有Office 365授權不會告訴您不要有關該使用者能真正利用做什麼Office 365。可以一次使用Exchange Online或商務用 Skype Online吗?這位使用者是否可以存取SharePoint Online吗?他就沒有存取權Office 專業增強版吗?具有授權只是表示使用者有可能會存取這些服務。不過,使用者可用的功能取決於已啟用其授權的服務。

那要如何判斷使用者可存取哪些 Office 365 的功能?為此我們必須執行類似下列的命令:

Get-MsolUser -UserPrincipalName BelindaN@litwareinc.com | Select-Object -ExpandProperty Licenses | Select-Object -ExpandProperty ServiceStatus

在這個命令裡,我們使用 Get-MsolUser 指令程式來回傳關於 BelindaN@litwareinc.com 帳戶的資訊。一旦傳回那些資訊,我們接著會將帳戶資料傳送到 Select-Object 指令程式並要求 Select-Object「展開」Licenses 屬性的值:

Select-Object -ExpandProperty Licenses

為什麼這麼做?依預設,Licenses 屬性只能告訴我們授權套件 (Belinda 的授權來源) 的名稱:

Licenses
--------
{litwareinc:ENTERPRISEPACK}

「展開」Licenses 屬性可為我們提供多一點點的資訊:

ExtensionData     AccountSku       AccountSkuId ServiceStatus
-------------     ----------       ------------ -------------
System.Runtime... Microsoft.On...  litwarein... {Microsoft.Online.A...

接著藉由展開 ServiceStatus 屬性,我們可以取回更多資訊:

 

服務計劃 描述

SWAY

Sway

INTUNE_O365

Office 365 的行動裝置管理

YAMMER_ENTERPRISE

Yammer

RMS_S_ENTERPRISE

Azure 版權管理 (RMS)

OFFICESUBSCRIPTION

Office 專業增強版

MCOSTANDARD

商務用 Skype Online

SHAREPOINTWAC

Office Online

SHAREPOINTENTERPRISE

SharePoint Online

EXCHANGE_S_ENTERPRISE

Exchange Online Plan 2

註記注意事項:
您會說這樣要輸入太多資料了?如果您可以忍受一點 Windows PowerShell 的含糊性,則可以使用此命令的這個精簡版本:
(Get-MsolUser -UserPrincipalName BelindaN@litwareinc.com).Licenses[0].ServiceStatus

為了避免讓您產生疑惑,我們可以「展開Licenses 屬性,因為 Licenses 是多重值屬性:這是可儲存多個值的單一屬性。展開屬性的值後,我們可以簡單地從中取得那些預設不會顯示在螢幕上的其他數值。

註記注意事項:
所以您應該要如何知道值是多重值屬性呢?為了找出答案,請試著執行一個類似下列的命令:
Get-MsolUser -UserPrincipalName BelindaN@litwareinc.com | Get-Member
Get-member 指令程式會回傳關於物件本身的資訊,而在此狀況下,就是指關於屬性值的資訊,使用者帳戶物件即是由這些值組成。以下是 Get-Member 對於 Licenses 屬性所代表的涵義:
Licenses Property System.Collections.Generic.List[Microsoft.On...
如果屬性定義對於合集有一些涵義 (在此狀況下為 System.Collections.Generic.List),那麼您會知道您正在處理一個多重值屬性。

所以這代表什麼意思?若要回答這個問題,讓我們先看看另一個 Get-MsolUser Cmdlet 所傳回的資訊:

ServicePlan                       ProvisioningStatus
-----------                       ------------------
SWAY                              Success
INTUNE_O365                       Success
YAMMER_ENTERPRISE                 PendingInput
RMS_S_ENTERPRISE                  Success
OFFICESUBSCRIPTION                Success
MCOSTANDARD                       Success
SHAREPOINTWAC                     Success
SHAREPOINTENTERPRISE              Success
EXCHANGE_S_ENTERPRISE             Success

讓我們也看一下表格,了解這些詭異命名服務計畫確實代表什麼意義:

 

服務計劃 描述

SWAY

Sway

INTUNE_O365

Office 365 的行動裝置管理

YAMMER_ENTERPRISE

Yammer

RMS_S_ENTERPRISE

Azure 版權管理 (RMS)

OFFICESUBSCRIPTION

Office 專業增強版

MCOSTANDARD

商務用 Skype Online

SHAREPOINTWAC

Office Online

SHAREPOINTENTERPRISE

SharePoint Online

EXCHANGE_S_ENTERPRISE

Exchange Online Plan 2

都了解了嗎?MCOSTANDARD 只是 商務用 Skype Online 的內部程式設計名稱,而 OFFICESUSBCRIPTION 是 Office 專業增強版 的內部程式設計名稱。這並不是能靠直覺反應的事,但是只要您隨身攜帶這個表格,使用 Office 365 服務來工作並不會有問題。

但稍等一下:還有一些事。如我們在使用 Office 365 PowerShell 檢視授權與服務一文學到的,如果 ProvisioningStatus 設定為 Success,這表示服務已完全啟動;例如,如果 MCOSTANDARD 設定為 Success,表示使用者可以存取商務用 Skype Online。如果 ProvisioningStatus 設定為 PendingInput,表示 Office 365 仍然在處理服務要求;不過,使用者通常可以在要求處理完成時登入並存取服務。(YAMMER_ENTERPRISE 一律是顯示為 PendingInput,但是這沒有關係:這並不會阻止使用者登入 Yammer)。

重要重要事項:
OFFICESUBSCRIPTION 處於 PendingInput 狀態時,使用者可以安裝並啟動新的 Office 專業增強版 安裝。

更不用說,當一個服務設定為 Disabled,表示此服務有問題且無法供使用者使用。

回到頁首

在另一篇文章中,我們已了解如何使用 Office 365 PowerShell 來停用使用者對服務的存取權。(如果未讀到該文章,請參閱 使用 Office 365 PowerShell 停用服務存取權)。這會導向一個顯而易見的問題:有任何方法可以判斷哪些「使用者」 (也就是有多位使用者) 有哪些已啟用或停用的服務嗎?

我們希望有人會問這個問題。為了回答這個問題,讓我們針對我們唯一可用的計劃 litwareinc:ENTERPRISEPACK,複習一下最初在使用 Office 365 PowerShell 檢視授權與服務一文中看到的服務表格:

 

服務計劃 描述

SWAY

Sway

INTUNE_O365

Office 365 的行動裝置管理

YAMMER_ENTERPRISE

Yammer

RMS_S_ENTERPRISE

Azure 版權管理 (RMS)

OFFICESUBSCRIPTION

Office 專業增強版

MCOSTANDARD

商務用 Skype Online

SHAREPOINTWAC

Office Online

SHAREPOINTENTERPRISE

SharePoint Online

EXCHANGE_S_ENTERPRISE

Exchange Online Plan 2

您可能還記得,服務計劃其實是產品的內部程式設計名稱;舉例來說,OFFICESUBSCRIPTION 就是 Office 專業增強版 的內部程式設計名稱。如果 OFFICESUBSCRIPTION 在某個使用者的服務計劃上顯示為 SUCCESS,則表示該使用者能夠存取 Office 專業增強版。如果 EXCHANGE_S_ENTERPRISE 顯示為 DISABLED,則表示使用者無法使用 Exchange Online。

重要重要事項:
OFFICESUBSCRIPTION 處於 PendingInput 狀態時,使用者可以安裝並啟動新的 Office 專業增強版 安裝。

此時服務出現的順序極為重要。Windows PowerShell 會將「索引編號」指派給清單中的每個項目。第一個項目為 0,下一個項目為 1,依此類推。下表會說明結果:

 

索引編號 服務計劃

0

SWAY

1

INTUNE_O365

2

YAMMER_ENTERPRISE

3

RMS_S_ENTERPRISE

4

OFFICESUBSCRIPTION

5

MCOSTANDARD

6

SHAREPOINTWAC

7

SHAREPOINTENTERPRISE

8

EXCHANGE_S_ENTERPRISE

如您所見,SWAY 是第一個列出的服務,所以指派給它的索引編號是 0。

警告警告:
為什麼是 0 而不是 1 呢?這是程式設計因素。在程式設計語言中,索引可告訴您某個項目距離陣列開頭的「位移」是多少。第一個項目陣列的開頭,所以它的位移是 0。第二個項目與陣列的開頭距離 1 個項目,所以它的位移是 1。

在此舉例說明。假設我們想要一份尚未針對 Exchange Online 進行啟用的所有已授權使用者清單。若要這麼做,可以使用下列命令:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses[0].ServiceStatus[8].ProvisioningStatus -eq "Disabled"}

無可否認地,這是一個樣子隱密的小命令,因此讓我們花幾分鐘來說明它的運作方式。這實際上是一個由兩個部分組成的命令,第一個部分非常簡單:我們使用 Get-MsolUser Cmdlet 來傳回所有 Office 365 使用者 (包括已授權和未授權) 的集合:

Get-MsolUser

這項資訊會接著經由管道傳送至 Where-Object Cmdlet。Where-Object 會細查所有使用者帳戶,以尋找同時符合下列兩個準則的帳戶:

  • isLicensed 屬性等於 (-eq) True ($true)。這可讓我們剔除未授權的使用者。

  • Licenses[0].ServiceStatus[8].ProvisioningStatus 屬性的值等於 (-eq) Disabled。為了達到我們的立即目的,這個龐大屬性名稱的重要部分會是:

    ServiceStatus[8]

    [8] 代表 Exchange Online 的索引編號。(我們在幾分鐘前已從資料表得知。) 假如我們想要尋找已針對商務用 Skype Online 進行啟用的所有使用者,該怎麼辦?商務用 Skype Online 的索引編號是 5,所以我們會使用這個語法:

    ServiceStatus[5]

    以此類推。

    順便一提,Licenses[0] 指出我們想要查看的授權方案。因為我們的測試網域只有一個授權方案,所以這其實無所謂。但是,假設我們有位使用者已被指派來自兩個不同授權方案的授權。在該情況下,Licenses[0] 會代表第一個授權方案,Licenses[1] 會代表第二個授權方案。

    若要尋找指派給使用者的授權,以及其列出的順序,請執行下列命令:

    Get-MsolUser -UserPrincipalName <Account> | Format-List DisplayName,Licenses
    

您是否了解這一切的運作方式?Office 專業增強版 的索引編號是 4;因此,這個命令會傳回一份尚未針對 Office 專業增強版 進行啟用的所有使用者清單:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.ServiceStatus[4].ProvisioningStatus -eq "Disabled"}

而假如我們想要一份已啟用Office 專業增強版 的使用者清單,該怎麼辦?如果您已啟用,則您的 ServiceStatus 將會是PendingInputSuccess;換句話說,您的 ServiceStatus 將不會等於 (-ne) Disabled。這表示我們需要做的一切就是使用我們先前的命令,然後將 -eq 運算子換成 -ne 運算子:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.ServiceStatus[4].ProvisioningStatus -ne "Disabled"}

俗話說得好,這個程式碼要是參加諸多選美競賽可能都贏不了。而且說實話,此程式碼還有可能更為雜亂。例如,假設我們想要找出已同時啟用 商務用 Skype Online 和 Exchange Online 的使用者:

Get-MsolUser | Where-Object {$_.isLicensed -eq $true -and $_.Licenses.ServiceStatus[5].ProvisioningStatus -ne "Disabled" -and $_.Licenses.ServiceStatus[8].ProvisioningStatus -ne "Disabled"}

但別管它看起來是否很粗糙:重點是,您可以相當輕鬆地擷取到這項資訊。您無法使用 Office 365 系統管理中心來取得這項相同資訊嗎?理論上可以,但實際上不行。若要使用 Office 365 系統管理中心來取得這項相同資訊,您需要查看每一位使用者 (一次一個) 的授權資訊,然後手動記錄誰已針對 X 進行啟用而誰尚未。這樣行得通,但老實說,如果您有 10 位或 11 位以上的使用者,您將不會這麼做。這樣太繁瑣又耗時。

當然,這也就是為什麼我們要有 Windows PowerShell 的原因:Windows PowerShell 協助讓您免於面對那樣既繁瑣又耗時的工作。

順便一提,以下是用於檢視服務資訊的最終命令:

Get-MsolUser | Select-Object DisplayName, @{Name="Sway";Expression={$_.Licenses[0].ServiceStatus[0].ProvisioningStatus}}, @{Name="MDM";Expression={$_.Licenses[0].ServiceStatus[1].ProvisioningStatus}}, @{Name="Yammer";Expression={$_.Licenses[0].ServiceStatus[2].ProvisioningStatus}}, @{Name="AD RMS";Expression={$_.Licenses[0].ServiceStatus[3].ProvisioningStatus}}, @{Name="OfficePro";Expression={$_.Licenses[0].ServiceStatus[4].ProvisioningStatus}}, @{Name="Skype";Expression={$_.Licenses[0].ServiceStatus[5].ProvisioningStatus}}, @{Name="OfficeWeb";Expression={$_.Licenses[0].ServiceStatus[6].ProvisioningStatus}}, @{Name="SharePoint";Expression={$_.Licenses[0].ServiceStatus[7].ProvisioningStatus}}, @{Name="Exchange";Expression={$_.Licenses[0].ServiceStatus[8].ProvisioningStatus}} | ConvertTo-Html > "C:\My Documents\Service Info.html"

而且,是的,這是一個樣子非常奇怪的命令。但是,它會建立一個 CSV 檔案來顯示所有使用者及其服務狀態。

回到頁首

 
顯示: