Przejdź do treści
Powrót do Centrum Pomocy
Microsoft 365
Aplikacje Microsoft

PowerShell i cmdlety Microsoft 365 – kompletny przewodnik po zarządzaniu środowiskiem chmurowym

Microsoft 365 to fundament nowoczesnego miejsca pracy, łączący Exchange Online, SharePoint, Teams, OneDrive, Azure AD i dziesiątki innych usług w jednej platfor

14 min czytania·Zaktualizowano dzisiaj
Faktura VAT 23% + KSeFDostawa 1-3 min e-mailemGwarancja działania klucza5,0 / 5,0(KluczeSoft)

Microsoft 365 to fundament nowoczesnego miejsca pracy, łączący Exchange Online, SharePoint, Teams, OneDrive, Azure AD i dziesiątki innych usług w jednej platformie. Dla wielu administratorów graficzne centra administracyjne są pierwszym wyborem – aż do momentu, gdy trzeba wykonać masową operację na tysiącu skrzynek, wygenerować raport z uprawnień wszystkich witryn SharePoint albo zautomatyzować miesięczny audyt licencji. Wtedy na scenę wkracza PowerShell – jedyne narzędzie, które daje pełną, programowalną kontrolę nad każdym zakątkiem ekosystemu Microsoft 365. W tym przewodniku pokażę ci, od czego zacząć, jak poruszać się po gąszczu modułów, które cmdlety są najważniejsze i jak budować skrypty, które realnie oszczędzają godziny pracy.

Dlaczego cmdlety PowerShell są niezbędne w administracji Microsoft 365

Centra administracyjne Microsoft 365 – od Admin Center, przez Exchange Admin Center, po SharePoint Admin Center – przeszły w ostatnich latach ogromną metamorfozę. Są szybsze, bardziej responsywne i oferują coraz więcej funkcji. Mimo to mają jedną fundamentalną wadę: operują na pojedynczych obiektach. Gdy trzeba zmienić politykę retencji dla 500 skrzynek pocztowych, odebrać licencje grupie 200 nieaktywnych użytkowników albo dodać setkę kontaktów z pliku CSV, klikanie w interfejsie staje się nie tylko żmudne, ale też podatne na błędy.

PowerShell eliminuje te ograniczenia dzięki temu, że każda operacja jest powtarzalna, parametryzowalna i może być wykonana na dowolnej liczbie obiektów jednocześnie. Co więcej, cmdlety Microsoft 365 wspierają potokowość – wyniki jednej komendy automatycznie stają się wejściem dla następnej – co pozwala na budowanie zaawansowanych przepływów pracy bez pisania setek linii kodu. Przykładowo, jednym potokiem możesz pobrać wszystkie skrzynki użytkowników z działu sprzedaży, sprawdzić ich rozmiar, odfiltrować te powyżej 50 GB, a następnie wysłać ich właścicielom powiadomienie z prośbą o oczyszczenie skrzynki. W GUI taka operacja jest po prostu niemożliwa do wykonania ręcznie.

W ekosystemie Microsoft 365 PowerShell nie jest dodatkiem – to podstawowe narzędzie administracyjne, które Microsoft rozwija równolegle z samą platformą. Wiele funkcji w chmurze Microsoftu, takich jak zaawansowane reguły transportu w Exchange Online, polityki zgodności w Purview czy automatyzacje w Teams, jest dostępnych wyłącznie przez cmdlety. Administrator, który ignoruje PowerShell, de facto rezygnuje z pełnej kontroli nad środowiskiem. W 2026 roku znajomość modułów takich jak ExchangeOnlineManagement, Microsoft.Graph czy MicrosoftTeams jest już standardem branżowym wymienianym w ogłoszeniach o pracę dla administratorów M365.

Moduły PowerShell dla Microsoft 365 – przegląd architektury

Zrozumienie architektury modułów PowerShell dla Microsoft 365 jest kluczowe, bo w ciągu ostatnich lat krajobraz ten przeszedł gruntowną transformację. Dawniej dominował jeden, monolityczny moduł MSOnline (MSOL) oraz AzureAD, ale oba zostały oficjalnie wycofane ze wsparcia – MSOL przestał działać w marcu 2025 roku, a AzureAD podążył tą samą drogą. Dziś wszystkie ścieżki prowadzą do dwóch filarów: Microsoft Graph PowerShell SDK oraz wyspecjalizowanych modułów dla poszczególnych usług.

Microsoft Graph PowerShell SDK to uniwersalne API do Microsoft 365 oparte na REST. Jego cmdlety – rozpoznawalne po przedrostkach Get-Mg, New-Mg, Update-Mg i Remove-Mg – obejmują setki endpointów Graph API i umożliwiają zarządzanie niemal każdym aspektem platformy: od użytkowników i grup w Azure AD, przez pliki w OneDrive, aż po wiadomości w Teams. Moduł dzieli się na dwa warianty: Microsoft.Graph (kompletny, zawierający wszystkie podmoduły) oraz Microsoft.Graph.Beta (z podglądowymi funkcjami). W środowiskach produkcyjnych zaleca się korzystanie ze stabilnej wersji v1.0, rezerwując Betę dla testów i eksploracji najnowszych możliwości.

Równolegle funkcjonują moduły wyspecjalizowane. ExchangeOnlineManagement (EXO V3) to moduł do zarządzania Exchange Online, oparty na REST i znacząco szybszy oraz bardziej niezawodny od swojego poprzednika. Jego cmdlety zachowują znajome nazwy, takie jak Get-Mailbox, Set-Mailbox, Get-MessageTrace, ale działają przez nowoczesne API zamiast starych sesji PowerShell Remoting. Kolejnym kluczowym modułem jest MicrosoftTeams – obecnie w wersji 6.x – który obsługuje tworzenie i konfigurację zespołów, polityki spotkań, numery telefoniczne w Teams Phone czy ustawienia pokojów konferencyjnych. Dla SharePoint Online i OneDrive używa się Microsoft.Online.SharePoint.PowerShell (PnP PowerShell), który oprócz standardowych cmdletów oferuje bogaty zestaw komend do zarządzania strukturą witryn, uprawnieniami i brandingiem. Do tego dochodzą moduły dziedzinowe: Microsoft.PowerApps.Administration.PowerShell dla Power Platform, MSCommerce do zarządzania samoobsługowym zakupem licencji czy WhiteboardAdmin do administracji tablicami Whiteboard.

Kluczową zmianą w 2026 roku jest pełne wdrożenie uwierzytelniania opartego na Microsoft Graph we wszystkich modułach. Oznacza to, że do łączenia się z dowolną usługą używasz teraz Connect-ExchangeOnline, Connect-MgGraph czy Connect-MicrosoftTeams z parametrem -Scopes, a wszystkie one wymagają nowoczesnego uwierzytelniania (OAuth 2.0), eliminując słabe hasła i przestarzałe podstawowe uwierzytelnianie, które Microsoft wyłączył definitywnie w 2022 roku.

Instalacja i pierwsze połączenie – szybki start w 5 minut

Zanim zaczniesz automatyzować cokolwiek, potrzebujesz odpowiednich modułów i działającej sesji. Proces instalacji w 2026 roku jest prostszy niż kiedykolwiek – wszystkie moduły są dostępne w oficjalnej galerii PowerShell Gallery, a ich instalacja sprowadza się do jednego polecenia na moduł.

Najpierw upewnij się, że masz PowerShell w wersji 7.4 lub nowszej. Starsza Windows PowerShell 5.1 wciąż działa, ale Microsoft rekomenduje PowerShell 7 jako docelową platformę dla wszystkich modułów chmurowych. Instalację zaczynasz od podniesienia uprawnień (jako administrator) i wykonania:

Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber
Install-Module -Name Microsoft.Graph -Force -AllowClobber
Install-Module -Name MicrosoftTeams -Force -AllowClobber

Po instalacji proces łączenia różni się w zależności od modułu. Dla Exchange Online używasz Connect-ExchangeOnline, dla Microsoft Graph – Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All", a dla Teams – Connect-MicrosoftTeams. Każda z tych komend otworzy nowoczesne okno logowania. Jeśli pracujesz na serwerze bez interfejsu graficznego, możesz użyć uwierzytelniania za pomocą certyfikatu lub tożsamości zarządzanej (Managed Identity) w Azure, co jest szczególnie ważne w scenariuszach automatyzacji bezobsługowej.

Ważna uwaga dotycząca scope'ów (zakresów uprawnień): Microsoft Graph wymaga jawnego wyspecyfikowania, do jakich zasobów chcesz uzyskać dostęp. Nie ma tu czegoś takiego jak "dostęp do wszystkiego". To świetna praktyka bezpieczeństwa, ale wymaga przemyślenia, jakie uprawnienia są rzeczywiście potrzebne. Dla podstawowej administracji zestaw User.Read.All, Group.Read.All, Directory.Read.All w zupełności wystarczy. Jeśli planujesz zmiany, dodaj odpowiedniki .ReadWrite.All. Częstym błędem początkujących jest proszenie o wszystkie dostępne scope'y naraz, co może sprawić, że sesja zostanie odrzucona przez polityki Conditional Access w organizacji.

Najważniejsze cmdlety – praktyczny leksykon administratora

Znajomość wszystkich cmdletów jest niemożliwa i niepotrzebna – sam Microsoft Graph SDK zawiera ich ponad 30 tysięcy. Zamiast tego warto opanować kilkadziesiąt kluczowych komend, które pokrywają 90% codziennych zadań. Oto podzielony na kategorie zestaw, który powinien znaleźć się w twoim notatniku administratora.

Zarządzanie użytkownikami i licencjami

Podstawą jest Get-MgUser, który zastąpił starego Get-AzureADUser i Get-MsolUser. Zwraca wszystkich użytkowników w organizacji, a z parametrami filtrującymi pozwala zawęzić wyniki: Get-MgUser -Filter "department eq 'Sales'" albo Get-MgUser -Filter "accountEnabled eq false" do znalezienia wyłączonych kont. Do tworzenia użytkowników służy New-MgUser, do modyfikacji Update-MgUser, a do usuwania Remove-MgUser. Licencjami zarządza się przez osobną ścieżkę: Get-MgUserLicenseDetail do sprawdzania przydzielonych licencji, Set-MgUserLicense do ich przypisywania i odbierania. Nowością wartą odnotowania jest Get-MgUserDelta, który zwraca tylko zmiany od określonego momentu, co radykalnie przyspiesza skrypty synchronizujące.

Exchange Online – skrzynki, dystrybucja, śledzenie

W module EXO najważniejsze są: Get-Mailbox (lista skrzynek z możliwością filtrowania po typie, bazie danych, dziale), Get-MailboxStatistics (statystyki użycia, rozmiar, liczba elementów), Set-Mailbox (konfiguracja limitów, delegacji, polityk), Get-MessageTrace (śledzenie wiadomości z ostatnich 90 dni), New-DistributionGroup i Add-DistributionGroupMember (grupy dystrybucyjne) oraz Get-MailboxPermission i Add-MailboxPermission (zarządzanie pełnym dostępem i uprawnieniami Send-As). Często niedoceniany, a niezwykle przydatny jest Search-Mailbox, który umożliwia przeszukiwanie zawartości skrzynek według słów kluczowych, a nawet usuwanie znalezionych wiadomości – idealne przy reagowaniu na incydenty bezpieczeństwa.

Microsoft Teams

Get-Team wyświetla wszystkie zespoły, Get-TeamUser – członków konkretnego zespołu z rolami. New-Team tworzy nowy zespół z możliwością określenia właściciela, typu prywatności i szablonu. Set-Team modyfikuje istniejący zespół, a Remove-Team usuwa go wraz z całą zawartością (uważaj, to nieodwracalne!). W obszarze polityk najważniejsze to Get-CsTeamsMeetingPolicy, Set-CsTeamsMeetingPolicy i Grant-CsTeamsMeetingPolicy, a w zarządzaniu numerami telefonicznymi – Get-CsOnlineUser, Set-CsUser do przypisywania numerów i planów wywołań.

SharePoint Online

PnP PowerShell to potężne narzędzie, ale do podstawowych zadań wystarczy kilka cmdletów: Get-PnPTenantSite (wszystkie site collection w tenantcie), Get-PnPSiteCollectionAdmin (administratorzy zbioru witryn), Set-PnPTenantSite (zmiana parametrów, np. limitów miejsca), Get-PnPUser i Add-PnPUserToGroup (zarządzanie uprawnieniami). Nieoceniony w audytach jest Get-PnPFlow (listy wszystkich Power Automate w witrynie) oraz Get-PnPFile do pobierania plików bezpośrednio z poziomu skryptu.

Budowanie pierwszej automatyzacji – szablon skryptu produkcyjnego

Teoria jest ważna, ale prawdziwą moc PowerShell pokazuje w praktyce. Zbudujmy razem klasyczny skrypt audytowy, który generuje raport wszystkich użytkowników z ich licencjami, ostatnim logowaniem i rozmiarem skrzynki pocztowej. To dokładnie taki skrypt, jaki administratorzy piszą najczęściej.

# Połącz z usługami
Connect-MgGraph -Scopes "User.Read.All","Directory.Read.All","AuditLog.Read.All"
Connect-ExchangeOnline

# Pobierz wszystkich użytkowników z ostatnim logowaniem
$users = Get-MgUser -All -Property "id,displayName,userPrincipalName,department,
    accountEnabled,signInActivity,assignedLicenses" |
    Select-Object Id, DisplayName, UserPrincipalName, Department,
        AccountEnabled,
        @{N='LastSignIn';E={$_.SignInActivity.LastSignInDateTime}},
        @{N='Licenses';E={($_.AssignedLicenses).Count}}

# Dla każdego użytkownika pobierz rozmiar skrzynki
$report = foreach ($user in $users) {
    $mailboxStats = $null
    try {
        $mailboxStats = Get-MailboxStatistics -Identity $user.UserPrincipalName `
            -ErrorAction Stop
    } catch {}

    [PSCustomObject]@{
        DisplayName       = $user.DisplayName
        UPN               = $user.UserPrincipalName
        Department        = $user.Department
        Enabled           = $user.AccountEnabled
        LastSignIn        = $user.LastSignIn
        LicenseCount      = $user.Licenses
        MailboxSizeGB     = [math]::Round(
            ($mailboxStats.TotalItemSize.Value -replace '.*\(|,| bytes\)') / 1GB, 2)
        MailboxItemCount  = $mailboxStats.ItemCount
    }
}

# Wyeksportuj do CSV
$report | Export-Csv -Path "C:\Reports\M365_Audit_$(Get-Date -Format yyyyMMdd).csv" `
    -NoTypeInformation -Encoding UTF8

Ten skrypt łączy dane z dwóch różnych modułów – Microsoft Graph i Exchange Online – i łączy je w spójny raport. Zwróć uwagę na kilka produkcyjnych praktyk: użycie -All zamiast domyślnej paginacji (domyślnie Get-MgUser zwraca tylko 100 wyników!), zabezpieczenie try/catch na wypadek, gdyby użytkownik nie miał skrzynki (np. konta gościnne), oraz eksport do UTF-8, który poprawnie obsługuje polskie znaki diakrytyczne. Raport możesz następnie wykorzystać jako źródło danych do Power BI lub zaimportować do arkusza kalkulacyjnego.

Podobny wzorzec możesz zastosować do setek innych scenariuszy: masowe dodawanie aliasów do skrzynek z pliku CSV, automatyczne odbieranie licencji nieaktywnym użytkownikom, tworzenie zespołów Teams na podstawie listy projektów, czy comiesięczna inwentaryzacja wszystkich witryn SharePoint z ich właścicielami i datą ostatniej modyfikacji.

Bezpieczeństwo i zgoda – uwierzytelnianie bez haseł

Każdy skrypt PowerShell, który łączy się z Microsoft 365, potrzebuje tożsamości. W fazie rozwoju i testów logujesz się interaktywnie swoim kontem administratora. To jest w porządku – ale tylko na tym etapie. Gdy skrypt trafia do produkcji, musi działać bez nadzoru człowieka, a trzymanie hasła administratora w kodzie lub na dysku to prosta droga do katastrofy.

Microsoft przewidział to i oferuje kilka mechanizmów uwierzytelniania bezhasłowego, które są standardem w 2026 roku. Pierwszy i najprostszy to certyfikat. Generujesz certyfikat (może być self-signed do zastosowań wewnętrznych), rejestrujesz go jako metodę uwierzytelniania dla aplikacji w Azure AD, a w skrypcie podajesz jego odcisk palca: Connect-MgGraph -ClientId "twoje-client-id" -TenantId "twoj-tenant-id" -CertificateThumbprint "ABCD1234...". Drugi mechanizm to Managed Identity – dostępny, gdy skrypt działa na maszynie wirtualnej Azure, Azure Automation lub Azure Function. Wtedy nie potrzebujesz żadnych sekretów; platforma Azure automatycznie zapewnia tożsamość. Trzeci to App Secret, czyli hasło aplikacji – najmniej bezpieczne, ale wciąż akceptowalne, jeśli sekret jest przechowywany w Azure Key Vault, a nie w kodzie.

Kluczową koncepcją jest też zgoda administracyjna (admin consent) na scope'y. Jeśli twój skrypt używa Connect-MgGraph -Scopes "User.ReadWrite.All", musi to zostać zaakceptowane przez administratora globalnego. Bez tej zgody cmdlet przy pierwszym uruchomieniu zgłosi błąd Insufficient privileges. Dlatego przed wdrożeniem automatyzacji upewnij się, że zgoda została udzielona – możesz to zrobić przez portal Azure AD lub samym PowerShellem: New-MgServicePrincipalAppRoleAssignment.

Typowe pułapki i jak ich unikać

Nawet doświadczeni administratorzy wpadają w sidła specyficznych zachowań cmdletów Microsoft 365. Pierwszą i najczęstszą pułapką jest paginacja wyników. Domyślnie Get-MgUser, Get-MgGroup i wiele innych cmdletów zwracają maksymalnie 100 obiektów. Jeśli twoja organizacja ma 5000 użytkowników, a ty nie użyjesz parametru -All, twój raport będzie dotyczył tylko pierwszych 100 z nich – i możesz o tym nie wiedzieć, bo cmdlet nie zgłasza ostrzeżenia. Zawsze dodawaj -All lub -PageSize gdy operujesz na całej organizacji.

Druga pułapka to throttling, czyli ograniczanie liczby żądań przez API Microsoftu. Graph API nakłada limity na liczbę zapytań w jednostce czasu, a ich przekroczenie skutkuje błędem HTTP 429 (Too Many Requests) i potencjalnym zablokowaniem na kilka minut. W skryptach przetwarzających tysiące obiektów warto dodać 1-2 sekundowe odstępy między wywołaniami (Start-Sleep -Milliseconds 500) lub użyć wbudowanego mechanizmu retry.

Trzecia pułapka to różnice między wersją v1.0 a Beta Microsoft Graph API. Cmdlety Beta często oferują kuszące nowe funkcje – na przykład zaawansowane filtry – ale ich nazwy, parametry i zachowanie mogą się zmienić bez ostrzeżenia. W skryptach produkcyjnych używaj wyłącznie stabilnego modułu. Jeśli potrzebujesz funkcji z Bety do testów, oznacz to wyraźnie w komentarzach i bądź gotowy na refaktoryzację.

Czwarta pułapka dotyczy obsługi błędów. PowerShell domyślnie kontynuuje wykonanie po błędzie niekrytycznym. Jeśli Set-Mailbox nie powiedzie się dla jednego użytkownika z tysiąca, pętla przejdzie dalej, a ty możesz nigdy się o tym nie dowiedzieć. Używaj -ErrorAction Stop wewnątrz try/catch i loguj błędy do pliku, aby mieć pełny obraz wykonania skryptu. Dobrą praktyką jest też używanie $ErrorActionPreference = "Stop" na początku skryptu, co wymusza zatrzymanie przy każdym błędzie.

Częste pytania

Czy MSOnline i AzureAD wciąż działają w 2026 roku?

Nie. Moduł MSOnline przestał działać w marcu 2025 roku, a AzureAD został wycofany w tym samym okresie. Ich następcą jest Microsoft Graph PowerShell SDK. Jeśli masz stare skrypty korzystające z Get-MsolUser lub Get-AzureADUser, musisz je przepisać na Get-MgUser i odpowiedniki Graph.

Jak szybko znaleźć odpowiedni cmdlet dla konkretnego zadania?

Użyj wbudowanego polecenia Find-MgGraphCommand z modułu Microsoft Graph. Na przykład Find-MgGraphCommand -Uri "/users" -Method GET zwróci wszystkie cmdlety związane z odczytywaniem użytkowników. Do tego Get-Command -Module ExchangeOnlineManagement -Noun Mailbox pokaże wszystkie cmdlety Exchange operujące na skrzynkach pocztowych.

Dlaczego mój skrypt działa na 100 użytkownikach, ale nie na 5000?

To klasyczny problem paginacji. Dodaj parametr -All do Get-MgUser, Get-MgGroup i podobnych cmdletów. Bez niego zwracają one tylko pierwszą stronę wyników, zazwyczaj 100 obiektów.

Jak połączyć dane z kilku modułów w jednym skrypcie?

Każdy moduł wymaga osobnego połączenia: Connect-MgGraph dla Graph API, Connect-ExchangeOnline dla Exchange, Connect-MicrosoftTeams dla Teams. Wszystkie trzy mogą działać równolegle w tej samej sesji PowerShell – po prostu wywołaj je po kolei na początku skryptu.

Czy mogę uruchamiać cmdlety Microsoft 365 na serwerze bez GUI?

Tak, używając uwierzytelniania certyfikatowego lub Managed Identity. Connect-MgGraph -ClientId "..." -TenantId "..." -CertificateThumbprint "..." działa bez żadnego interfejsu graficznego, idealnie do Azure Automation, zadań cron na Linuksie czy Task Scheduler na Windows Server.

Jak sprawdzić, jakie cmdlety są dostępne w moim module?

Get-Command -Module ExchangeOnlineManagement wyświetli pełną listę cmdletów w module. Aby znaleźć konkretne funkcje, użyj Get-Command -Module ExchangeOnlineManagement -Noun *Mailbox* lub Get-Command -Module Microsoft.Graph -Verb Get -Noun *User*.

Czym zastąpić stare Get-MsolAccountSku do zarządzania licencjami?

W Microsoft Graph użyj Get-MgSubscribedSku – zwraca dokładnie te same informacje o subskrypcjach i dostępnych licencjach. Do przypisywania licencji służy Set-MgUserLicense.

Dlaczego dostaję błąd „Insufficient privileges” mimo że jestem administratorem?

Twoja sesja Graph API ma za wąskie scope'y. Wyloguj się (Disconnect-MgGraph) i połącz ponownie z szerszymi uprawnieniami, np. Connect-MgGraph -Scopes "User.ReadWrite.All","Group.ReadWrite.All","Directory.ReadWrite.All". Pamiętaj, że nowe scope'y mogą wymagać ponownej zgody administracyjnej.

Czy muszę przechodzić na PowerShell 7?

Nie musisz, ale zdecydowanie powinieneś. Windows PowerShell 5.1 wciąż działa z większością modułów, ale Microsoft rozwija i testuje swoje cmdlety przede wszystkim pod PowerShell 7.4+. Nowa wersja jest szybsza, wieloplatformowa i obsługuje równoległość przez ForEach-Object -Parallel.

Gdzie znaleźć szczegółową dokumentację cmdletów?

Oficjalna dokumentacja Microsoft Learn pod adresem learn.microsoft.com/powershell zawiera opisy wszystkich cmdletów z przykładami. Z poziomu PowerShell działa też Get-Help Get-MgUser -Detailed lub Get-Help Get-MgUser -Online, które otwiera stronę dokumentacji w przeglądarce.

Co dalej – ścieżka od cmdletów do zaawansowanej automatyzacji

Opanowanie cmdletów PowerShell dla Microsoft 365 to dopiero początek. Kolejnym naturalnym krokiem jest przeniesienie skryptów do Azure Automation – zarządzanej usługi, która wykonuje twój kod zgodnie z harmonogramem, przechowuje poświadczenia w bezpieczny sposób i wysyła powiadomienia o ewentualnych błędach. Azure Automation obsługuje natywnie moduły Microsoft 365 i umożliwia tworzenie tzw. runbooków, czyli skryptów uruchamianych cyklicznie.

Dla zespołów, które chcą pójść jeszcze dalej, Microsoft oferuje Microsoft 365 DSC (Desired State Configuration) – podejście deklaratywne, w którym definiujesz docelowy stan konfiguracji (np. "wszystkie nowe zespoły Teams mają mieć wyłączony dostęp gości, a wszystkie skrzynki mają mieć włączony audyt"), a DSC automatycznie egzekwuje ten stan. W połączeniu z repozytorium kodu (Git) i pipeline'ami CI/CD otrzymujesz pełne Infrastructure as Code dla Microsoft 365 – zmiany konfiguracji są recenzowane, testowane i wdrażane w kontrolowany sposób, z pełną historią i możliwością wycofania.

Na rynku dostępne są również narzędzia firm trzecich, które rozszerzają możliwości natywnego PowerShell, oferując gotowe skrypty i automatyzacje dla setek najczęstszych scenariuszy – od raportowania licencji po masowe migracje – co pozwala administratorom skupić się na strategicznych zadaniach zamiast na pisaniu kodu od zera.

Najczęściej zadawane pytania

Nie. Moduł MSOnline przestał działać w marcu 2025 roku, a AzureAD został wycofany w tym samym okresie. Ich następcą jest Microsoft Graph PowerShell SDK. Jeśli masz stare skrypty korzystające z `Get-MsolUser` lub `Get-AzureADUser`, musisz je przepisać na `Get-MgUser` i odpowiedniki Graph.
Użyj wbudowanego polecenia `Find-MgGraphCommand` z modułu Microsoft Graph. Na przykład `Find-MgGraphCommand -Uri "/users" -Method GET` zwróci wszystkie cmdlety związane z odczytywaniem użytkowników. Do tego `Get-Command -Module ExchangeOnlineManagement -Noun Mailbox` pokaże wszystkie cmdlety Exchange operujące na skrzynkach pocztowych.
To klasyczny problem paginacji. Dodaj parametr `-All` do `Get-MgUser`, `Get-MgGroup` i podobnych cmdletów. Bez niego zwracają one tylko pierwszą stronę wyników, zazwyczaj 100 obiektów.
Każdy moduł wymaga osobnego połączenia: `Connect-MgGraph` dla Graph API, `Connect-ExchangeOnline` dla Exchange, `Connect-MicrosoftTeams` dla Teams. Wszystkie trzy mogą działać równolegle w tej samej sesji PowerShell – po prostu wywołaj je po kolei na początku skryptu.
Tak, używając uwierzytelniania certyfikatowego lub Managed Identity. `Connect-MgGraph -ClientId "..." -TenantId "..." -CertificateThumbprint "..."` działa bez żadnego interfejsu graficznego, idealnie do Azure Automation, zadań cron na Linuksie czy Task Scheduler na Windows Server.
`Get-Command -Module ExchangeOnlineManagement` wyświetli pełną listę cmdletów w module. Aby znaleźć konkretne funkcje, użyj `Get-Command -Module ExchangeOnlineManagement -Noun *Mailbox*` lub `Get-Command -Module Microsoft.Graph -Verb Get -Noun *User*`.
W Microsoft Graph użyj `Get-MgSubscribedSku` – zwraca dokładnie te same informacje o subskrypcjach i dostępnych licencjach. Do przypisywania licencji służy `Set-MgUserLicense`.
Twoja sesja Graph API ma za wąskie scope'y. Wyloguj się (`Disconnect-MgGraph`) i połącz ponownie z szerszymi uprawnieniami, np. `Connect-MgGraph -Scopes "User.ReadWrite.All","Group.ReadWrite.All","Directory.ReadWrite.All"`. Pamiętaj, że nowe scope'y mogą wymagać ponownej zgody administracyjnej.
Nie musisz, ale zdecydowanie powinieneś. Windows PowerShell 5.1 wciąż działa z większością modułów, ale Microsoft rozwija i testuje swoje cmdlety przede wszystkim pod PowerShell 7.4+. Nowa wersja jest szybsza, wieloplatformowa i obsługuje równoległość przez `ForEach-Object -Parallel`.
Oficjalna dokumentacja Microsoft Learn pod adresem `learn.microsoft.com/powershell` zawiera opisy wszystkich cmdletów z przykładami. Z poziomu PowerShell działa też `Get-Help Get-MgUser -Detailed` lub `Get-Help Get-MgUser -Online`, które otwiera stronę dokumentacji w przeglądarce.

Czy ten artykuł był pomocny?

PowerShell i cmdlety Microsoft 365 – kompletny przewodnik… | Centrum Pomocy KluczeSoft