在單一 Windows PowerShell 視窗中連線至所有 Office 365 服務

 

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

上次修改主題的時間:2017-01-13

摘要:使用單一 Windows PowerShell 視窗,將 Windows PowerShell 連線至所有 Office 365 服務。

當您使用 PowerShell 來管理 Office 365 時,可能同時會開啟多達五個不同的 Windows PowerShell 工作階段,對應至 Office 365 系統管理中心、SharePoint Online、Exchange Online、商務用 Skype Online 和 安全規範中心。因為在個別的 Windows PowerShell 工作階段中,有五種不同的連線方法,您的桌面看起來可能像這樣︰

一次執行五個 Windows PowerShell 主控台

這對管理 Office 365 而言並非最佳,因為您無法在五個視窗之間交換跨服務管理的資料。本主題說明如何使用單一的 Windows PowerShell 執行個體,您可用以管理 Office 365、商務用 Skype Online、Exchange Online、SharePoint Online 和 安全規範中心。

請參閱下列主題:

開始之前

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

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

在您可以從 Windows PowerShell 的單一執行個體管理所有 Office 365 之前,請考慮下列必要條件︰

本節將展示連線步驟而不作深入說明。如果您有任何問題或需要詳細資訊,您可以閱讀本主題的其餘部分。此處的步驟號碼,會符合該主題的其餘部分中,以步驟編號的小節︰

  1. 以系統管理員的身分開啟 Windows PowerShell (使用 [以系統管理員身分執行])。

  2. 執行此指令,並輸入您的 Office 365工作或學校帳戶 認證。

    $credential = Get-Credential
    
  3. 執行這些命令,以連線到 Office 365。

    Import-Module MsOnline
    
    Connect-MsolService -Credential $credential
    
  4. 執行這些命令,以連線到 SharePoint Online。以您網域的實際值來取代 domainhost。例如,litwareinc.onmicrosoft.comdomainhost 值是 litwareinc

    Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
    
    Connect-SPOService -Url https://domainhost-admin.sharepoint.com -credential $credential
    
  5. 執行這些命令,以連線到 商務用 Skype Online。您第一次連線時,預期會有 WSMan NetworkDelayms 值增加的警告,而應該忽略。

    Import-Module SkypeOnlineConnector
    
    $sfboSession = New-CsOnlineSession -Credential $credential
    
    Import-PSSession $sfboSession
    
  6. 執行這些命令,以連線到 Exchange Online。

    $exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $credential -Authentication "Basic" -AllowRedirection
    
    Import-PSSession $exchangeSession -DisableNameChecking
    
  7. 執行這些命令,以連線到 安全規範中心。

    $ccSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.compliance.protection.outlook.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection
    
    Import-PSSession $ccSession -Prefix cc
    
    註記注意事項:
    因為系統會將文字前置詞「cc」新增到所有安全規範中心 Cmdlet 名稱,所以您可以在同一個 Windows PowerShell 工作階段中,執行在 Exchange Online 和 安全規範中心 中的 Cmdlet。例如,在 安全規範中心 中 Get-RoleGroup 會變成 Get-ccRoleGroup
  8. 當您準備好要關閉時,請先執行這個複合命令,再關閉 Windows PowerShell 視窗。

    Remove-PSSession $sfboSession ; Remove-PSSession $exchangeSession ; Remove-PSSession $ccSession ; Disconnect-SPOService
    

如果您正在執行 Windows 8、Windows 8.1、Windows Server 2012 R2 或 Windows Server 2012 R2,請執行此動作︰

  1. 使用以下任何一種方法來尋找 Windows PowerShell 的捷徑:

    • 在 [開始] 畫面上,按一下空白區域,然後輸入 Windows PowerShell

    • 在桌面或 [開始] 畫面上,按 Windows 鍵 + Q。在 [搜尋] 常用鍵中,輸入 Windows PowerShell

    • 在桌面或 [開始] 畫面上,將游標移到右上角,或從畫面的右緣向左撥動以顯示常用鍵。選取 [搜尋] 常用鍵,然後輸入 Windows PowerShell

  2. 在結果上,以滑鼠右鍵按一下 [Windows PowerShell],然後選取 [以系統管理員身分執行]。

  3. 如果出現 [使用者帳戶控制] 對話方塊,請選取 [是],確認您想要使用系統管理員認證來執行 Windows PowerShell。

如果您正在執行 Windows 7 SP1 (或 Windows Server 2008 R2 SP1),請執行此動作︰

  1. 在 [開始] 功能表上,選取 [所有程式] > [附屬應用程式] > [Windows PowerShell]。以滑鼠右鍵按一下 [Windows PowerShell],然後選取 [以系統管理員身分執行]。

  2. 如果出現 [使用者帳戶控制] 對話方塊,請選取 [是],確認您想要使用系統管理員認證來執行 Windows PowerShell。

您必須以系統管理員身分執行 Windows PowerShell。如果您沒有這樣做,當嘗試匯入其中一個所需的模組時,您將會看到如下所示的錯誤訊息。

The specified module 'Microsoft.Online.SharePoint.Online.PowerShell' was not loaded because no valid module file was found in any directory.

補救這個狀況的唯一方法是關閉 Windows PowerShell,並以系統管理員身分重新啟動。這裡有一個快速又簡單的方式,可以辨別您是否以系統管理員身分執行 Windows PowerShell:提示字元是 PS C:\Windows\System32>,而不是 PS C:\Users\UserName>

回到頁首

認證物件提供了加密的方法,來傳遞您的使用者名稱和密碼到 Windows PowerShell。若要建立認證物件,請在 Windows PowerShell 中執行下列命令。

$credential = Get-Credential
註記注意事項:
$credential 是將儲存認證物件的變數。您無需命名變數 $credential,但這樣做會比較容易記得哪個變數包含認證物件 (這一點非常重要,因為我們將會多次重複使用這個變數)。這也可以讓您更易於遵循範例,因為本文一律會使用 $credential 來代表認證物件。

之後,Windows PowerShell 會顯示一個對話方塊,如下所示。

空白認證要求對話方塊。

在 [使用者名稱] 方塊中輸入您的 工作或學校帳戶 使用者名稱,格式為 username@domainname (例如,kenmyer@litwareinc.onmicrosoft.com),然後在 [密碼] 方塊中輸入您的密碼,並按一下 [確定]:

完成的認證要求對話方塊。

請注意,這種情況很常見,您將不會看到任何種類的確認來表示已建立認證物件 (Windows PowerShell 通常會在發生問題時通知您,但沒有問題時就不一定會通知您)。如果您想要驗證是否已建立認證物件,請在 Windows PowerShell 提示字元中輸入下列命令,然後按 Enter:

$credential

接著您應該可以看到類似此螢幕的畫面。

UserName                               Password
--------                               --------
kenmyer@litwareinc.onmicrosoft.com     System.Security.SecureString

請記住一件事,那就是 Get-Credential Cmdlet 只會建立認證物件;它並不會驗證您或驗證您所提供的使用者名稱和密碼是否正確。例如,假設您不小心將使用者名稱打成 eknmyer@litwareinc.onmicrosoft.com。如果您這樣做,Get-Credential 將使用該使用者名稱來建立認證物件,而不會實際檢查這是否為有效的使用者名稱。在您實際使用該物件來嘗試連線到 Office 365 服務之前,您不會知道是否已建立真正有效的認證物件。

我們可以先從連線到 Office 365 本身開始。

首先在此我們必須先匯入 Office 365 模組 (Windows PowerShell 的 Windows Azure Active Directory 模組)。若要這樣做,請在 Windows PowerShell 中執行此命令。

Import-Module MsOnline

若要驗證模組確實已經匯入,請執行此命令。

Get-Module

在這個命令所傳回的模組清單中,您應該會看見類似如下所示的項目:Manifest 1.0 MSOnline {Add-MsolForeignGroupToRole, Add-MsolG...}

如果您看見列出的 MSOnline,這表示一切皆依計劃進行。

透過建立的認證物件 (請參閱步驟 2:建立 Windows PowerShell 認證物件),並利用載入的 MsOnline 模組,我們現在可以使用 Connect-MsolService Cmdlet 及下列命令連線到 Office 365。

Connect-MsolService -Credential $credential

請注意,您只需要提供認證物件 ($credential)。根據那些認證,Office 365 會自動將您連線到正確的網域。您不必在執行 Connect-MsolService 時指定您的網域名稱。

若要驗證您確實Office 365,請執行此命令。

Get-MsolDomain

接著,我們應該會得到如下的內容。

Name                         Status          Authentication
----                         ------          --------------
litwareinc.onmicrosoft.com   Verified        Managed

使用下列命令匯入 SharePoint Online 模組:

Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking

DisableNameChecking 參數會隱藏此警告。

WARNING: The names of some imported commands from the module 'Microsoft.Online.SharePoint.PowerShell' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.

為了要連線到 SharePoint Online,您必須提供兩個資訊:您的認證和 SharePoint Online 系統管理網站的 URL。認證部分非常簡單:我們已將它儲存在變數 $credential 中 (請參閱步驟 2:建立 Windows PowerShell 認證物件)。至於您系統管理網站的 URL,那也很容易判斷。假設您的 Office 365 網域名稱是 litwareinc.onmicrosoft.com

若要判斷系統管理網站的 URL,請執行此動作:

  1. 使用前置詞 https:// 作為開頭。

  2. 加上您網域名稱的網域主機部分。例如,litwareinc.onmicrosoft.com 的網域主機名稱是 litwareinccontoso.onmicrosoft.com 的網域主機名稱是 contoso

  3. 新增連字號 (-),後面加上 admin.sharepoint.com

換句話說:

https:// + litwareinc + -admin.sharepoint.com = https://litwareinc-admin.sharepoint.com

在完成建構 URL 之後,您接著可以使用該 URL 與您的認證物件來連線到 SharePoint Online。只需使用類似以下的命令來呼叫 Connect-SPOService Cmdlet 即可。

Connect-SPOService -Url https://litwareinc-admin.sharepoint.com -credential $credential

若要驗證已建立連線,請在 Windows PowerShell 中執行下列命令。

Get-SPOSite

您應該取得一份您所有 SharePoint Online 網站的清單。

Url                                       Owner          Storage Quota
---                                       -----          -------------
http://litwareinc-public.sharepoint.com/                 1000
https://litwareinc.sharepoint.com/                       1000
https://litwareinc.sharepoint.com/search                 1000

您的 (步驟 3︰連線到 Office 365中所述的) Office 365 命令仍然有用 (請嘗試執行 Get-MsolUser,並自己看看)。這表示您現在可以從 Windows PowerShell 的同一個執行個體管理 Office 365 和 SharePoint Online。

連線到 商務用 Skype Online (及到 Exchange Online 或 安全規範中心) 與連線到 Office 365 或 SharePoint Online 不同。這是因為 商務用 Skype Online 和 Exchange Online Cmdlet 不像 Office 365 和 SharePoint Online Cmdlet 那樣會安裝在您的電腦上;相反地,每次您登入時,適當的 Cmdlet 會暫時複製到您的電腦上;當您登出時,這些 Cmdlet 則會從您的電腦上移除。

為了要連線到 商務用 Skype Online,您必須匯入 商務用 Skype Online 模組。若要這樣做,請執行此命令。

Import-Module SkypeOnlineConnector

第一次這麼做時,您可能會看到下列警告訊息,可以放心地忽略。

WARNING: WSMan NetworkDelayms has been set to 30000 milliseconds. The previous value was 5000 milliseconds.
WARNING: To improve the performance of the Lync Online Connector, it is recommended that the network delay be set to
30000 milliseconds (30 seconds). However, you can use Set-WinRMNetworkDelayMS to change the network delay to any
integer value.

在匯入模組之後,請執行此命令。

$sfboSession = New-CsOnlineSession -Credential $credential

我們已經建立遠端 PowerShell 工作階段。在此情況下,這表示我們已連線到在其中一部 Office 365 伺服器上執行的 Windows PowerShell 執行個體。

雖然我們已建立與 Office 365 的連線,但我們尚未下載管理 商務用 Skype Online 所需的指令碼、Cmdlet 和其他項目。若要這樣做,必須執行此命令。

Import-PSSession $sfboSession

匯入 Windows PowerShell 工作階段時,您應該會看到如下所示的進度列,它會針對已匯入到您電腦的所有 商務用 Skype Online Cmdlet 進行報告。

Lync Online 進度列。

當進度列消失後,您應該會看到如下所示的輸出。

ModuleType Version    Name               ExportedCommands
---------- -------    ----               ----------------
Script     1.0        tmp_swc5mp4v.1ck  {Copy-CsVoicePolicy, Disabl...

執行此命令,它會建立與 Exchange Online遠端 Windows PowerShell 工作階段。

$exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $credential -Authentication "Basic" -AllowRedirection
註記注意事項:
為何連線至 Exchange Online 的命令比連線至 商務用 Skype Online 的命令更為複雜?技術上來說並非如此:兩個命令所執行的內容完全相同。但是,商務用 Skype Online 團隊建立自己的 Cmdlet - New-CsOnlineSession - 在連線至 Exchange Online 時會隱藏使用的部分參數 (例如 AuthenticationAllowRedirection)。AuthenticationAllowRedirection 參數有效地內建至 New-CsOnlineSession Cmdlet 中。您不需要自行輸入該資訊。您必須在連線至 Exchange Online 時輸入這些參數,因為 Exchange Online 使用標準 New-PSSession Cmdlet 來連線至 Office 365。缺點是您必須多做一些輸入動作。優點是您不需要下載及安裝 Exchange Online 模組。

現在您需要做的是匯入此遠端工作階段,就像之前對 商務用 Skype Online 所做的動作一樣。

Import-PSSession $exchangeSession -DisableNameChecking

您應該可以看到類似此螢幕的畫面。

ModuleType Version  Name             ExportedCommands
---------- -------  ----             ----------------
Script     1.0      tmp_nweiqjvl.geu {Add-AvailabilityAddressSpace...

現在請嘗試執行此命令。

Get-AcceptedDomain

結果是,您應該會看到關於在 Exchange Online 中,為電子郵件地址所設定的 Office 365 網域資訊。

Name            DomainName          DomainType      Default
----            ----------          ----------      -------
litwareinc.com  litwareinc.com      Authoritative   True

安全規範中心 是 Office 365 中的一種服務,可讓您從一個位置管理法規遵循功能。如需詳細資訊,請參閱 Office 365 安全規範中心

安全規範中心 與 Exchange Online 的連線指示非常類似,但稍有不同,您不久後會看到。

執行此命令,它會建立與 安全規範中心 之間的遠端 PowerShell 工作階段。

$ccSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.compliance.protection.outlook.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection

現在執行此命令︰

Import-PSSession $ccSession -Prefix cc

同樣地,這個命令與 Exchange Online 的命令非常類似。DisableNameChecking 參數並非必要,因為在 安全規範中心 中沒有未經核准的動詞。但額外的 -Prefix cc 參數和值呢?這就是我們之前曾告訴過您的不同之處。

Exchange Online 和 安全規範中心 共用某些具有完全相同名稱的 Cmdlet ,並提供相同的功能。Get-RoleGroup 是一個範例。

所以要是您試著匯入包含具有相同名稱的 Cmdlet 的兩個工作階段,會發生什麼事?它們會互相衝突。會顯示大的黃色警告訊息,說明 WARNING: Proxy creation has been skipped for the following command:,後面接著因衝突而無法匯入的 Cmdlet 清單。最後的結果是?您可以執行 Exchange Online 中的 Get-RoleGroup,因為您先與其連線;但是您無法執行 安全規範中心 中的 Get-RoleGroup,因為您最後才與其連線,且衝突的 Cmdlet 拒絕匯入。

處理這個問題最簡單的方法是,將隨意自定的文字前置詞新增到匯入的 安全規範中心 Cmdlet。我們在 Import-PSSession Cmdlet 上,使用具有「cc」值的 Prefix 參數。那又能怎樣?透過 (稍微) 變更此工作階段的 安全規範中心 Cmdlet 名稱以消除衝突。所有匯入的 安全規範中心 Cmdlet 名稱的名詞部分 (「-」的右側),現在都是以「cc」作為開頭。例如,對 安全規範中心 有爭議的 Get-RoleGroup Cmdlet 會變成 Get-ccRoleGroup,所以不會與 Exchange Online 的 Get-RoleGroup 產生衝突。

至於缺點?所有安全規範中心 Cmdlet 名稱,即使是唯一而不需要另外加上前置詞的 Cmdlet,都會加上「cc」前置詞。例如,即使在 Exchange Online 中沒有這種 Cmdlet,Get-ComplianceSearch 也會變成 Get-ccComplianceSearch。這是有點麻煩,但當您考慮能在單一 Windows PowerShell 工作階段中管理所有 Office 365 服務的優點後,這並不算太糟。只要記得為 安全規範中心 中所有程序的 Cmdlet 名稱加上「cc」就好。

如果一切順利,您會看見類似這樣的內容:

ModuleType Version  Name             ExportedCommands
---------- -------  ----             ----------------
Script     1.0      tmp_xbbx5exr.ehm {Add-ccRoleGroupMember, Get-ccAdminAuditLogConfig, Get-ccA...

現在,您可以在單一 Windows PowerShell 工作階段中管理所有 Office 365 服務。

若您關閉 Windows PowerShell 視窗,商務用 Skype Online 遠端連線仍會持續進行大約 15 分鐘。因為 商務用 Skype Online 會限制任何一個人或任一網域可開啟的同時連線數,這可能會是個問題。使用 商務用 Skype Online 時,個別系統管理員一次最多可有三個開啟的連線,而一個網域最多可有九個開啟的連線。如果您登入 商務用 Skype Online 然後結束,但未妥善關閉工作階段,則該工作階段將維持開啟大約 15 分鐘。這將導致您或網域中其他系統管理員可使用的連線數減少一個。

相反地,讓我們依正常程序,關閉 商務用 Skype Online、Exchange Online 和 安全規範中心 的遠端工作階段。在進行之前,請執行此命令。

Get-PSSession

Get-PSSession Cmdlet 應會顯示您至少有三個開啟的遠端工作階段,一個適用於 商務用 Skype Online、一個適用於 Exchange Online,另一個適用於 安全規範中心 (您可能會有三個以上正在執行的工作階段,取決於您是否使用此 Windows PowerShell 執行個體連線到 Office 365 以外的其他項目而定)。您應該會看見如下所示的內容。

Id Name     ComputerName     State   ConfigurationName    Availability
-- ----     ------------     -----   -----------------    ------------
 1 Session1 webdir0a.onl...  Opened  Microsoft.PowerShell    Available
 2 Session2 outlook.offi...  Opened  Microsoft.Exchange      Available
 3 Session3 ps.complianc...  Opened  Microsoft.Exchange      Available

若要關閉這三個工作階段,請一次只執行下列命令的其中一個。第一個命令會關閉 商務用 Skype Online 工作階段、第二個命令會關閉 Exchange Online 工作階段,而第三個命令會關閉 安全規範中心 工作階段。

Remove-PSSession $sfboSession
Remove-PSSession $exchangeSession
Remove-PSSession $ccSession

若您現在執行 Get-PSSession Cmdlet,應該不會看見任何內容 (除非已啟動且正在執行其他遠端工作階段)。

沒有遠端工作階段的 Windows PowerShell 主控台
註記注意事項:
若要同時關閉所有遠端工作階段,您可以使用此命令:
Get-PSSession | Remove-PSSession

如果您現在嘗試從任一關閉的工作階段中執行 Cmdlet (例如,在 商務用 Skype Online 中的 Get-CsMeetingConfiguration),就會顯示類似以下的錯誤訊息。

Get-CsMeetingConfiguration : The term 'Get-CsMeetingConfiguration' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

這個錯誤訊息之所以出現,是因為關閉遠端工作階段時,刪除了 商務用 Skype Online、Exchange Online 和 安全規範中心 的 Cmdlet。

若要關閉 SharePoint Online 工作階段,請輸入此命令。

Disconnect-SPOService

如果您現在嘗試執行 Get-SPOSite Cmdlet,就會顯示類似以下的錯誤訊息。

get-sposite : No connection available. Use Connect-SPOService before running this CmdLet.

因為您不再連線至 SharePoint Online,因此無法擷取網站資訊。

至於您的 Office 365 連線,雖然有 Connect-MsolService Cmdlet,但卻沒有對應 Disconnect-MsolService Cmdlet。因此對於 Office 365,只需要關閉 Windows PowerShell 視窗。不過,最後再做這件事仍是個好主意,然後您才可以正常中斷 SharePoint Online、商務用 Skype Online、Exchange Online 和 安全規範中心 的連線。

 
顯示: