使用 Office 365 PowerShell 停用服務存取權

 

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

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

說明如何使用 Office 365 PowerShell 來新增或移除組織中使用者對 Office 365 服務的存取權。

當 Office 365 帳戶被指派授權計劃中的授權時,使用者即可經由該授權取得 Office 365 服務。不過,您可以控制使用者可以存取的 Office 365 服務。例如,即使授權允許存取 SharePoint Online,您仍可停用其存取權。事實上,您可以使用 Office 365 PowerShell 來停用對任意數目的服務的存取權:

  • 個別帳戶。

  • 一組帳戶。

  • 您組織中的所有帳戶。

內容:

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

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

另請參閱

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

若要對單一授權計劃中的使用者停用 Office 365 服務,請執行下列步驟:

  1. 使用下列語法,找出授權計劃中不需要的服務:

    $LO = New-MsolLicenseOptions -AccountSkuId <AccountSkuId> -DisabledPlans "<UndesirableService1>", "<UndesirableService2>"...
    

    這個範例會建立 LicenseOptions 物件,以停用名為 litwareinc:ENTERPRISEPACK 的授權計劃中的 Office Online 和 SharePoint Online 服務 (Office 365 Enterprise E3)。

    $LO = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"
    
  2. 對一或多位使用者使用步驟 1 的 LicenseOptions 物件。

    • 若要建立已停用服務的新帳戶,請使用下列語法:

      New-MsolUser -UserPrincipalName <Account> -DisplayName <DisplayName> -FirstName <FirstName> -LastName <LastName> -LicenseAssignment <AccountSkuId> -LicenseOptions $LO -UsageLocation <CountryCode>
      

      本範例會為指派授權及停用步驟 1 所述服務的 Allie Bellew 建立新帳戶。

      New-MsolUser -UserPrincipalName allieb@litwareinc.com -DisplayName "Allie Bellew" -FirstName Allie -LastName Bellew -LicenseAssignment litwareinc:ENTERPRISEPACK -LicenseOptions $LO -UsageLocation US
      

      如需有關在 Office 365 PowerShell 中建立使用者帳戶的詳細資訊,請參閱使用 Office 365 PowerShell 建立使用者帳戶

    • 若要停用現有授權使用者的服務,請使用下列語法:

      Set-MsolUserLicense -UserPrincipalName <Account> -LicenseOptions $LO
      

      本範例會停用使用者 BelindaN@litwareinc.com 的服務。

      Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -LicenseOptions $LO
      
    • 若要為現有的授權使用者停用步驟 1 所述的服務,請執行下列命令:

      $AllLicensed = Get-MsolUser -All | where {$_.isLicensed -eq $true}; $AllLicensed | foreach {Set-MsolUserLicense -LicenseOptions $LO}
      
    • 若要為一組現有的使用者停用服務,請使用下列其中一種方法來識別使用者:

      • 根據現有的帳戶屬性篩選帳戶   若要這麼做,使用下列語法:

        $x = Get-MsolUser -All <FilterableAttributes>
        $x | ForEach {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -LicenseOptions $LO}
        

        此範例會為美國境內銷售部門中的使用者停用服務。

        $USSales = Get-MsolUser -All -Department "Sales" -UsageLocation "US"
        $USSales | ForEach {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -LicenseOptions $LO}
        
      • 使用特定帳戶清單   若要這樣做,請執行下列步驟:

        1. 建立一個文字檔,其中每一行上都包含一個帳戶,如下所示:

          akol@contoso.com
          tjohnston@contoso.com
          kakers@contoso.com
          

          在這個範例中,文字檔為 C:\My Documents\Accounts.txt。

        2. 執行下列命令:

          Get-Content "C:\My Documents\Accounts.txt" | foreach {Set-MsolUserLicense -UserPrincipalName $_ -LicenseOptions $LO}
          

若要在指派使用者給授權計劃的同時為其停用 Office 365 服務,請參閱停用時指派使用者授權的服務存取權

若要對所有可用授權計劃中的使用者停用 Office 365 服務,請執行下列步驟:

  1. 複製此指令碼,並將其貼入 [記事本]。

    $AllLicensingPlans = Get-MsolAccountSku
    for($i = 0; $i -lt $AllLicensingPlans.Count; $i++)
    {
        $O365Licences = New-MsolLicenseOptions -AccountSkuId $AllLicensingPlans[$i].AccountSkuId -DisabledPlans "<UndesirableService1>", "<UndesirableService2>"...
        Set-MsolUserLicense -UserPrincipalName <Account> -LicenseOptions $O365Licences
    }
    
  2. 為您的環境自訂下列值:

    • <UndesirableService>   在此範例中,我們將使用 Office Online 和 SharePoint Online。

    • <Account>   在此範例中,我們將使用 belindan@litwareinc.com。

    自訂的指令碼如下所示:

    $AllLicensingPlans = Get-MsolAccountSku
    for($i = 0; $i -lt $AllLicensingPlans.Count; $i++)
    {
        $O365Licences = New-MsolLicenseOptions -AccountSkuId $AllLicensingPlans[$i].AccountSkuId -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"
        Set-MsolUserLicense -UserPrincipalName belindan@litwareinc.com -LicenseOptions $O365Licences
    }
    
  3. 將指令碼以 RemoveO365Services.ps1 儲存至容易找到的位置。在此範例中,我們會將這個檔案儲存至 "C:\O365 Scripts" 中。

  4. 使用下列語法在 Office 365 PowerShell 中執行指令碼。

    & "C:\O365 Scripts\RemoveO365Services.ps1"
    
註記注意事項:
若要還原這些程序的效果 (也就是,重新啟用已停用的服務),請再次執行此程序,但使用 DisabledPlans 參數的 $null 值。

回到頁首

依預設,當您使用 Office 365 PowerShell 進行授權時,所有服務皆已啟用。而這通常是件好事:這表示您可以快速輕鬆地指派授權給使用者,而不需附帶指定每項要啟用的服務。

不過,儘管如此,您可能也會想要限制可供某些使用者使用的服務;例如某些使用者應該要能存取 Office 專業增強版、商務用 Skype Online 和 Exchange Online,,但是不應該能存取 SharePoint Online 或 Office Online。您可以用該方式限制帳戶嗎?從結果看來是可以的。為了協助說明這要如何運作,讓我們採取一個包含兩個步驟的方法來處理這個問題:

  1. 將一個會自動啟用所有服務的 Office 365 授權指派給使用者。

  2. 執行一組會為該使用者停用指定之服務的 Office 365 PowerShell 命令。

我們已經處理步驟 1:我們的使用者 (Belinda Newman) 現在已經擁有可讓她存取所有 Office 365 服務的 Office 365 授權。不過,我們想要修改 Belinda 的帳戶,讓她無法存取 SharePoint Online (SHAREPOINTENTERPRISE) 或 Office Online (SHAREPOINTWAC。但是,我們應該怎麼做呢?

方法如下。首先,我們將使用 New-MsolLicenseOptions Cmdlet 來建立包含我們想要停用之服務的 LicenseOption 物件。在 Belinda 的案例中,我們想要停用 SHAREPOINTENTERPRISESHAREPOINTWAC,所以我們使用這個命令:

$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"

想要了解它如何運作?您指定授權方案 (litwareinc:ENTERPRISEPACK),然後指出您想要停用的每項服務 (使用逗號分隔這些服務)。

註記注意事項:
請確定您將新的 LicenseOption 物件儲存在變數中。在上述範例中,我們使用了 $x,不過,您可以使用任何有效 Windows PowerShell 變數名稱。

此時我們可以使用下列命令來停用 Belinda 對這兩項服務的存取權:

Set-MsolUserLicense -UserPrincipalName BelindaN@litwareinc.com -LicenseOptions $x

這也並不需要太高明的技巧:我們只要呼叫 Set-MsolUserLicense Cmdlet 並納入 LicenseOptions 參數,連同包含我們想要停用之方案的變數 ($x)。而如果我們現在藉由執行 (Get-MsolUser -UserPrincipalName belindan@litwareinc.com).Licenses.ServiceStatus 命令,來查看一下 Belinda 的授權資訊,會看到什麼?我們會看到:

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

很酷,對吧?當然,如果我們想要的話,也可以對多位使用者重複執行相同的動作。例如,這個命令會將我們所有已授權的使用者的這兩項相同服務停用:

Get-MsolUser | Where-Object {$_.isLicensed -eq $True} | Set-MsolUserLicense -LicenseOptions $x

請記住,Belinda 仍然有有效的 Office 365 授權;只是她現在能夠存取的服務較少。在我們停用這兩項服務之前,Belinda 能夠存取新聞摘要、OneDrive 及 SharePoint Online 網站:

具有 SharePoint 存取權的使用者。

現在,她則無法再使用這些選項:

沒有 SharePoint 存取權的使用者。

這正是我們預期會發生的情況。

而假如我們稍後改變主意,該怎麼辦:可以重新啟用這些服務嗎?當然可以。若要重新啟用使用者的所有服務,只要使用此命令來建立下列 LicenseOption 物件即可:

$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans $null

這個命令有什麼功能?首先,Windows PowerShell 常數 $null 的意思是「無」。(或者,用稍微技術性一點的語言來說,就是「null 值」的意思。)回想一下,當我們使用 New-MsolLicenseOptions Cmdlet 時,必須指出我們想要停用的服務。在此例中,我們並不希望將任何服務停用。那可能會導致您相信我們可以使用類似以下的命令 (一個我們不指定 DisabledPlans 參數值的命令):

$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans ""

不過,這並沒有用。它反而會產生錯誤訊息:

Set-MsolUserLicense : Cannot bind parameter 'LicenseOptions'. Cannot convert the "" value of type "System.String" to type "Microsoft.Online.Administration.LicenseOption".

幸好,將參數值設定為 $null 確實有用:

$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans $null

這些明白表示,當我們執行 Set-MsolUserLicense Cmdlet 時,就是告訴 Set-MsolUserLicense 我們不想要將 Belinda 的任何服務停用:

Set-MsolUserLicense -UserPrincipalName BelindaN@litwareinc.com -LicenseOptions $x

並且,相當符合邏輯地,如果沒有任何服務遭到停用,就必定表示所有服務皆已啟用。

既然您已了解這項作業的運作方式,讓我們示範如何使用同一個命令既發出授權又停用指定的服務。這聽起來相當令人印象深刻,但老實說,其實一點也不難:您只要將 AddLicensesLicenseOptions 參數都包含在同一個命令中即可。換句話說,您需要先建立 LicenseOption 物件:

$x = New-MsolLicenseOptions -AccountSkuId "litwareinc:ENTERPRISEPACK" -DisabledPlans "SHAREPOINTWAC", "SHAREPOINTENTERPRISE"

然後,如先前所述,您需要在命令中同時使用 AddLicensesLicenseOptions 參數:

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

該命令會發給 Belinda Newman 一個新的授權,但是是一個 商務用 Skype Online (SHAREPOINTWAC) 和 SharePoint Online (SHAREPOINTENTERPRISE) 都被停用的授權。

回到頁首

 
顯示: