為什麼您需要使用適用於 Microsoft 365 的 PowerShell
本文適用於 Microsoft 365 企業版和 Office 365 企業版。
透過 Microsoft 365 系統管理中心,您可以管理Microsoft 365 使用者帳戶和授權。 您也可以管理Microsoft 365 服務,例如 Exchange Online、Teams 和 SharePoint。 如果您改為使用 PowerShell 來管理這些服務,您可以並利用命令行和腳本語言環境來加快速度、自動化和其他功能。
注意事項
Azure Active Directory 模組正由 Microsoft Graph PowerShell SDK 取代。 您可以使用 Microsoft Graph PowerShell SDK 來存取所有的 Microsoft Graph API。 如需詳細資訊,請參閱 開始使用 Microsoft Graph PowerShell SDK。 本文中的某些適用於 Microsoft 365 命令的 PowerShell 已更新為使用 Microsoft Graph PowerShell。
本文說明如何使用 PowerShell 來管理 365 Microsoft:
顯示您在 Microsoft 365 系統管理中心看不到的其他資訊
只能使用PowerShell設定功能和設定
執行大量作業
篩選數據
列印或儲存數據
跨服務管理
請記住,適用於 Microsoft 365 的 PowerShell 是一組適用於 Windows PowerShell 的模組,這是適用於 Windows 服務和平臺的命令行環境。 此環境會建立可使用其他模組擴充的命令殼層語言。 它提供執行簡單或複雜命令或腳本的方法。 例如,安裝適用於 Microsoft 365 模組的 PowerShell 並連線到您的 Microsoft 365 訂閱之後,您可以執行下列命令來列出 Microsoft Exchange Online 的所有使用者信箱:
Get-Mailbox
您也可以使用 Microsoft 365 系統管理中心來取得信箱清單,但針對所有 Web 應用程式計算所有網站的所有清單中的專案並不容易。
適用於 Microsoft 365 的 PowerShell 旨在協助您管理 Microsoft 365,而不是取代 Microsoft 365 系統管理中心。 系統管理員必須能夠針對 Microsoft 365 使用 PowerShell,因為有些設定程式只能透過 PowerShell 針對 Microsoft 365 命令來完成。 在這些情況下,您必須知道如何:
安裝 PowerShell for Microsoft 365 模組 (針對每個系統管理員電腦) 只執行一次。
針對每個 PowerShell 會話) , (一次連線到您的 Microsoft 365 訂閱。
收集執行Microsoft 365 命令所需的 PowerShell 所需的資訊。
針對 Microsoft 365 命令執行 PowerShell。
在您了解這些基本技能之後,就不需要使用 Get-Mailbox 命令來列出信箱使用者。 您也不需要瞭解如何建立新的命令,例如先前所述的命令,以計算所有 Web 應用程式所有網站的所有清單中的所有專案。 Microsoft和系統管理員社群可以視需要協助您進行這類工作。
適用於 Microsoft 365 的 PowerShell 可以顯示您無法在 Microsoft 365 系統管理中心看到的資訊
Microsoft 365 系統管理中心會顯示許多有用的資訊,但不會顯示Microsoft 365 儲存的使用者、授權、信箱和網站的所有可能資訊。 以下是 Microsoft 365 系統管理中心的 使用者和群組 範例:
此檢視提供您在許多情況下所需的資訊。 不過,您有時需要更多的資訊。 例如,Microsoft 365 授權 (和使用者可用的 Microsoft 365 功能) 部分取決於使用者的地理位置。 您可以延伸至美國用戶的原則和功能,可能與您可以延伸至印度或比利時用戶的原則和功能不同。 請遵循 Microsoft 365 系統管理中心的下列步驟來判斷使用者的地理位置:
連按兩下使用者的 [顯示名稱] 。
在使用者屬性顯示窗格中,選取 詳細數據。
在詳細數據顯示中,選取 其他詳細數據。
捲動直到您找到 [ 國家或地區] 標題:
在一張紙上寫下使用者的顯示名稱和位置,或複製並貼到 [記事本]。
您必須為每位使用者重複此程序。 如果您有許多使用者,此程式可能會很繁瑣。 使用 PowerShell,您可以使用下列命令來顯示所有使用者的這項資訊。
注意事項
Azure Active Directory 模組正由 Microsoft Graph PowerShell SDK 取代。 您可以使用 Microsoft Graph PowerShell SDK 來存取所有的 Microsoft Graph API。 如需詳細資訊,請參閱 開始使用 Microsoft Graph PowerShell SDK。
首先,使用 Microsoft Entra DC 系統管理員 或 雲端應用程式系統管理員 帳戶來 連線到您的 Microsoft 365 租使用者。
取得使用者的資訊需要 User.ReadBasic.All 許可權範圍或 [ 指派授權] 圖形 API 參考頁面中所列的其中一個其他許可權。
需要 Organization.Read.All 許可權範圍,才能讀取租用戶中可用的授權。
注意事項
自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模組已被取代。 若要深入瞭解,請閱讀 淘汰更新。 在此日期之後,這些模組的支援僅限於移轉協助Microsoft Graph PowerShell SDK 和安全性修正。 已淘汰的模組會繼續運作到 2025 年 3 月 30 日。
建議您移轉至 Microsoft Graph PowerShell ,以與Microsoft Entra ID 互動, (先前稱為 Azure AD) 。 如需常見的移轉問題,請參閱 移轉常見問題。 注意: 1.0.x 版的 MSOnline 可能會在 2024 年 6 月 30 日之後中斷。
Connect-MgGraph -Scopes "User.ReadBasic.All"
Get-MgUser -All -Property DisplayName, UsageLocation | Select DisplayName, UsageLocation
以下是結果的範例:
DisplayName UsageLocation
----------- -------------
Bonnie Kearney GB
Fabrice Canel BR
Brian Johnson (TAILSPIN) US
Anne Wallace US
Alex Darrow US
David Longmuir BR
此 PowerShell 命令的解譯是: (Get-MgUser) 取得目前Microsoft 365 訂閱中的所有使用者,但只會顯示每個使用者的名稱和位置 (選取 DisplayName、UsageLocation) 。
由於適用於 Microsoft 365 的 PowerShell 支援命令殼層語言,因此您可以進一步操作 Get-MgUser 命令所取得的資訊。 例如,您可能想要依使用者的位置排序這些使用者,將所有巴西使用者分組在一起,將所有美國使用者分組在一起,依此類推。 以下是 命令:
Get-MgUser -All -Property DisplayName, UsageLocation | Select DisplayName, UsageLocation | Sort UsageLocation, DisplayName
以下是結果的範例:
DisplayName UsageLocation
----------- -------------
David Longmuir BR
Fabrice Canel BR
Bonnie Kearney GB
Alex Darrow US
Anne Wallace US
Brian Johnson (TAILSPIN) US
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂用帳戶中的所有使用者,但只會顯示每個使用者的名稱和位置,並先依其位置排序,然後再依其名稱 (Sort UsageLocation、DisplayName) 。
您也可以使用其他篩選。 例如,如果您只想看到巴西使用者的資訊,請使用這個命令:
Get-MgUser -All -Property DisplayName, Country | Where-Object {$_.Country -eq "BR"} | Select DisplayName, Country
以下是結果的範例:
DisplayName UsageLocation
----------- -------------
David Longmuir BR
Fabrice Canel BR
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂用帳戶中位置為巴西的所有使用者 (Where {$_。UsageLocation -eq “BR”}) ,然後顯示每個用戶的名稱和位置。
關於大型網域的注意事項
如果您有一個具有數以萬計的使用者的大型網域,嘗試本文中顯示的一些範例可能會導致節流。 根據運算能力和可用網路頻寬等因素,您可能會嘗試一次執行太多作業。 大型組織可能會想要將其中一些 PowerShell 作業分割成兩個命令。
例如,下列命令會傳回所有用戶帳戶,並顯示每個帳戶的名稱和位置:
Get-MgUser -All | Select DisplayName, UsageLocation
該命令非常適合較小型的網域。 但是在大型組織中,您可能想要將該作業分割成兩個命令:一個命令將使用者帳戶資訊儲存在變數中,另一個命令用來顯示所需的資訊。 以下為範例:
$x = Get-MgUser -All -Property DisplayName, UsageLocation
$x | Select DisplayName, UsageLocation
這組 PowerShell 命令的解譯如下:
- 取得目前Microsoft 365 訂閱中的所有使用者,並將資訊儲存在名為 $x ($x = Get-MgUser) 變數中。
- 顯示變數 $x的內容,但只包含每個使用者 ($x的名稱和位置 |選取 [DisplayName]、[UsageLocation) ]。
Microsoft 365 具有您只能使用 PowerShell 為 Microsoft 365 設定的功能
Microsoft 365 系統管理中心旨在讓您存取適用於大部分環境的常見、實用系統管理工作。 換句話說,Microsoft 365 系統管理中心的設計目的是為了讓一般系統管理員能夠執行最常見的管理工作。 但有些工作無法在系統管理中心完成。
例如,商務用 Skype Online 系統管理中心提供幾個選項來建立自定義會議邀請:
使用這些設定,您可以新增會議邀請的一些個人化和專門技術。 但會議組態設定比只建立自定義會議邀請還多。 例如,會議預設允許:
匿名使用者自動進入每個會議。
出席者記錄會議。
您組織的所有使用者在加入會議時都會指定為主持人。
商務用 Skype Online 系統管理中心無法使用這些設定。 您可以從 PowerShell 控制它們,Microsoft 365。 以下是停用這三個設定的命令:
Set-CsMeetingConfiguration -AdmitAnonymousUsersByDefault $False -AllowConferenceRecording $False -DesignateAsPresenter "None"
注意事項
若要執行此命令,您必須安裝 商務用 Skype Online PowerShell 模組。
此 PowerShell 命令的解譯如下:
- 在 Set-CsMeetingConfiguration) (的新商務用 Skype Online 會議設定中,停用允許匿名用戶自動進入會議 (-AdmitAnonymousUsersByDefault $False) 。
- 停用出席者 (-AllowConferenceRecording $False) 錄製會議的能力。
- 請勿將組織中的所有使用者指定為演示者 (-DesignateAsPresenter “None”) 。
若要還原這些預設設定 (啟用選項) ,請執行下列命令:
Set-CsMeetingConfiguration -AdmitAnonymousUsersByDefault $True -AllowConferenceRecording $True -DesignateAsPresenter "Company"
還有其他類似的案例,這就是為什麼系統管理員應該知道如何執行PowerShell以Microsoft 365命令。
適用於 Microsoft 365 的 PowerShell 非常適合用於大量作業
當您有單一作業要執行時,Microsoft 365 系統管理中心之類的可視化介面最有價值。 例如,如果您需要停用一個用戶帳戶,您可以使用系統管理中心快速找出並清除複選框。 這可能比在PowerShell中執行類似的作業更容易。
但是,如果您必須在一大組其他專案中變更許多專案或一些選取的專案,Microsoft 365 系統管理中心可能不是最佳工具。 例如,假設您必須變更數千個電話號碼的前置詞,或從所有 SharePoint 網站移除特定使用者 Ken Myer 。 您要如何在 Microsoft 365 系統管理中心執行此動作?
在上一個範例中,假設您有數百個 SharePoint 網站,而您不知道 Ken 這個網站是其中的成員。 您必須從 Microsoft 365 系統管理中心開始,然後針對每個網站執行此程式:
選取網站的 URL 。
在 [網站集合內容] 方塊中,選取 [ 網站位址 ] 鏈接以開啟網站。
在網站上,選取 [ 共享]。
在 [ 共用] 對話框中,選取顯示具有網站許可權之所有用戶的連結:
在 [ 共享物件 ] 對話框中,選取 [ 進階]。
向下卷動使用者清單,尋找並選取 Ken Myer (假設他擁有網站) 的許可權,然後選取 [ 移除用戶權力]。
這會花 很長 的時間來處理數百個網站。
替代方法是在 PowerShell 中針對 Microsoft 365 執行下列命令,以從所有網站移除 Ken Myer:
Get-SPOSite | ForEach {Remove-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com"}
注意事項
此命令需要您安裝 SharePoint PowerShell 模組。
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂閱中的所有 SharePoint 網站 (Get-SPOSite) ,而針對每個網站,請從可存取它的使用者清單中移除 Ken (ForEach {Remove-SPOUser -Site $_。Url -LoginName “”kenmyer@litwareinc.com}) 。
我們告訴Microsoft 365 從每個網站移除 Ken Ken,包括他無法存取的網站。 因此,結果會顯示他無法存取之網站的錯誤。 我們可以在此命令上使用其他條件,只從登入清單上有 Ken 的站台中移除 Ken 的重要條件。 但是傳回的錯誤不會對網站本身造成損害。 此命令可能需要幾分鐘的時間,才能對數百個網站執行,而不是透過 Microsoft 365 系統管理中心運作數小時。
以下是另一個大量作業範例。 使用此命令將新 SharePoint 系統管理員 Bonnie Kearney 新增至組織中的所有網站:
Get-SPOSite | ForEach {Add-SPOUser -Site $_.Url -LoginName "bkearney@litwareinc.com" -Group "Members"}
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂用帳戶中的所有 SharePoint 網站,而且每個網站都允許 Bonnie Kearney 存取,方法是將登入名稱新增至網站的成員群組 (ForEach {Add-SPOUser -Site $_。Url -LoginName “bkearney@litwareinc.com” -Group “Members”}) 。
適用於 Microsoft 365 的 PowerShell 非常適合篩選數據
Microsoft 365 系統管理中心提供數種方式來篩選您的數據,以輕鬆找出目標資訊子集。 例如,Exchange 可輕鬆篩選使用者信箱的任何內容。 例如,以下是所有使用者的信箱清單,這些用戶都位於布開隆斯市:
Exchange 系統管理中心也可讓您結合篩選準則。 例如,您可以為所有在 Bloomwide 中且在財務部門工作的人尋找信箱。
但是,您可以在 Exchange 系統管理中心執行的動作有一些限制。 例如,您無法輕鬆地找到位於布開米達 或 聖馬婁內之人員的信箱,或是所有不在 Bloomwide 中的人的信箱。
您可以使用下列適用於 Microsoft 365 的 PowerShell 命令,為所有在布開來登入或聖馬來登入的人取得信箱清單:
Get-User | Where {$_.RecipientTypeDetails -eq "UserMailbox" -and ($_.City -eq "San Diego" -or $_.City -eq "Bloomington")} | Select DisplayName, City
以下是結果的範例:
DisplayName City
----------- ----
Alex Darrow San Diego
Bonnie Kearney San Diego
Julian Isla Bloomington
Rob Young Bloomington
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂用帳戶中所有在 SanWide 或 Bloom (Where {$_市有信箱的使用者。RecipientTypeDetails -eq “UserMailbox” -and ($_.City -eq “San Layout” -或 $_.City -eq “Bloom ) }) ,然後顯示每個 (選取 DisplayName, City) 的名稱和城市。
以下是命令,可列出除了 Bloomwide 以外的任何位置之人員的所有信箱:
Get-User | Where {$_.RecipientTypeDetails -eq "UserMailbox" -and $_.City -ne "Bloomington"} | Select DisplayName, City
以下是結果的範例:
DisplayName City
----------- ----
MOD Administrator Redmond
Alex Darrow San Diego
Allie Bellew Bellevue
Anne Wallace Louisville
Aziz Hassouneh Cairo
Belinda Newman Charlotte
Bonnie Kearney San Diego
David Longmuir Waukesha
Denis Dehenne Birmingham
Garret Vargas Seattle
Garth Fort Tulsa
Janet Schorr Bellevue
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂用帳戶中,信箱不在市/市的所有使用者, (Where {$_。RecipientTypeDetails -eq “UserMailbox” -and $_.City -ne “Bloomural”}) ,然後顯示每個項目的名稱和城市。
使用通配符
您也可以在 PowerShell 篩選中使用通配符來比對名稱的一部分。 例如,假設您要尋找用戶帳戶。 您只能記住,使用者的姓氏是 Anderson 或可能 為 Anderson 或 Jorgenson。
您可以使用搜尋工具並執行三個不同的搜尋,在 Microsoft 365 系統管理中心追蹤該使用者:
一個用於 Anderson
一個用於 Henderson
一個用於 Jorgenson
因為這三個名稱全都以 「son」 結尾,所以您可以告訴 PowerShell 顯示名稱結尾為 “son” 的所有使用者。 以下是 命令:
Get-User -Filter '{LastName -like "*son"}'
此 PowerShell 命令的解譯是:取得目前Microsoft 365 訂用帳戶中的所有使用者,但使用只列出姓氏結尾為 “son” 的使用者篩選 (-Filter '{LastName -like “*son”}') 。 * 代表任何一組字元,也就是使用者姓氏中的字母。
適用於 Microsoft 365 的 PowerShell 可讓您輕鬆列印或儲存數據
Microsoft 365 系統管理中心可讓您檢視數據清單。 以下是商務用 Skype Online 系統管理中心的範例,其中顯示已啟用商務用 Skype Online 的使用者清單:
若要將該資訊儲存至檔案,您必須將它貼到檔或Microsoft Excel 工作表中。 不論是哪一種情況,都可能需要額外的格式設定。 此外,Microsoft 365 系統管理中心並未提供直接列印顯示清單的方式。
幸運的是,您不僅可以使用PowerShell來顯示清單,還可以將清單儲存至可輕鬆匯入Excel的檔案。 以下是將商務用 Skype Online 使用者資料儲存至 CSV) 檔案 (逗號分隔值的範例命令,然後可以輕鬆地匯入為 Excel 工作表中的數據表:
Get-CsOnlineUser | Select DisplayName, UserPrincipalName, UsageLocation | Export-Csv -Path "C:\Logs\SfBUsers.csv" -NoTypeInformation
以下是結果的範例:
此 PowerShell 命令的解譯是:取得目前 Microsoft 365 訂閱中的所有商務用 Skype Online 使用者 (Get-CsOnlineUser) ;只取得用戶名稱、UPN 和位置 (選取 DisplayName、UserPrincipalName、UsageLocation) ;然後將該資訊儲存在名為 C:\Logs\SfBUsers.csv (Export-Csv -Path “C:\Logs\SfBUsers.csv” -NoTypeInformation) 的 CSV 檔案中。
您也可以使用選項,將此列表儲存為 XML 檔案或 HTML 頁面。 事實上,透過其他 PowerShell 命令,您可以使用您想要的任何自定義格式,直接將它儲存為 Excel 檔案。
您也可以將 PowerShell 命令的輸出傳送至 Windows 中的預設印表機,以直接顯示清單。 以下是範例命令:
Get-CsOnlineUser | Select DisplayName, UserPrincipalName, UsageLocation | Out-Printer
以下是您將列印出的文件樣貌:
此 PowerShell 命令的解譯是:取得目前 Microsoft 365 訂用帳戶中的所有商務用 Skype Online 使用者;只取得用戶名稱、UPN 和位置;然後將該資訊傳送至預設 Windows 印表機 (Out-Printer) 。
列印的檔具有與 PowerShell 命令視窗中顯示相同的簡單格式。 若要取得硬式複本,只要新增 |命令結尾的 Out-Printer 。
適用於 Microsoft 365 的 PowerShell 可讓您跨伺服器產品進行管理
組成 Microsoft 365 的元件是設計來共同運作。 例如,假設您將新使用者新增至 Microsoft 365,並指定使用者的部門和電話號碼等資訊。 如果您在任何Microsoft 365 服務中存取使用者的資訊,該資訊便可供使用:商務用 Skype Online、Exchange 或 SharePoint。
不過,這是對跨越產品系列的一般資訊而言。 產品特定資訊,例如使用者 Exchange 信箱的相關信息,通常無法跨套件使用。 例如,使用者信箱是否已啟用的相關信息,僅適用於 Exchange 系統管理中心。
假設您想要製作一份報告,顯示所有使用者的下列資訊:
使用者的顯示名稱
使用者是否獲得 365 Microsoft授權
使用者的 Exchange 信箱是否已啟用
是否已對使用者啟用商務用 Skype Online
您無法輕鬆地在 Microsoft 365 系統管理中心產生這類報告。 相反地,您必須建立個別的文件來儲存資訊,例如 Excel 工作表。 然後,從 Microsoft 365 系統管理中心取得所有使用者名稱和授權資訊、從 Exchange 系統管理中心取得信箱資訊、從商務用 Skype Online 系統管理中心取得商務用 Skype Online 資訊,然後合併該資訊。
替代方式是使用PowerShell腳本來為您編譯報表。
下列範例腳本比您到目前為止在本文中看到的命令更為複雜。 但是,它會顯示使用PowerShell建立難以取得之資訊檢視的可能性。 以下是編譯和顯示所需清單的腳本:
Connect-MgGraph -Scopes "User.ReadBasic.All"
$x = Get-MgUser -All
foreach ($i in $x)
{
$y = Get-Mailbox -Identity $i.UserPrincipalName
$i | Add-Member -MemberType NoteProperty -Name IsMailboxEnabled -Value $y.IsMailboxEnabled
$y = Get-CsOnlineUser -Identity $i.UserPrincipalName
$i | Add-Member -MemberType NoteProperty -Name EnabledForSfB -Value $y.Enabled
}
$x | Select DisplayName, IsLicensed, IsMailboxEnabled, EnabledforSfB
以下是結果的範例:
DisplayName IsLicensed IsMailboxEnabled EnabledForSfB
----------- ---------- ---------------- --------------
Bonnie Kearney True True True
Fabrice Canel True True True
Brian Johnson False True False
Anne Wallace True True True
Alex Darrow True True True
David Longmuir True True True
Katy Jordan False True False
Molly Dempsey False True False
此 PowerShell 腳本的解譯如下:
- 取得目前Microsoft 365 訂閱中的所有使用者,並將資訊儲存在名為 $x ($x = Get-MgUser) 的變數中。
- 啟動迴圈,在變數中的所有用戶上執行,$x (foreach ($i 在 $x) ) 中執行。
- 定義名為 $y 的變數,並將使用者的信箱資訊儲存 ($y = Get-Mailbox -Identity $i.UserPrincipalName) 。
- 將新屬性新增至名為 IsMailBoxEnabled 的用戶資訊。 將它設定為使用者信箱的 IsMailBoxEnabled 屬性值, ($i | Add-Member -MemberType NoteProperty -Name IsMailboxEnabled -Value $y.IsMailboxEnabled) 。
- 定義名為 $y 的變數,並將使用者的商務用 Skype Online 資訊儲存 ($y = Get-CsOnlineUser -Identity $i.UserPrincipalName) 。
- 將新屬性新增至名為 EnabledForSfB 的用戶資訊。 將它設定為使用者商務用 Skype Online 資訊的 Enabled 屬性值 ($i | Add-Member -MemberType NoteProperty -Name EnabledForSfB -Value $y.Enabled) 。
- 顯示使用者清單,但只包含其名稱、是否已授權,以及兩個新屬性,指出其信箱是否已啟用,以及是否已啟用商務用 Skype Online ($x |選取 [DisplayName]、[IsLicensed]、[IsMailboxEnabled]、[EnabledforSfB) ]。
另請參閱
開始使用適用於 Microsoft 365 的 PowerShell