M365Con 2027 – bezpłatna konferencja online · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Przestań marnować pieniądze: jak zautomatyzować optymalizację licencji Microsoft 365 za pomocą PowerShell

By · · Updated

Witamy ponownie na blogu! Jeśli zarządzasz dzierżawą Microsoft 365, na pewno znasz to nieprzyjemne uczucie, gdy na koniec miesiąca otwierasz fakturę. Widzisz dziesiątki, a może setki aktywnych licencji przypisanych do użytkowników, którzy nie logowali się od poprzedniego roku obrotowego. Ręczne sprawdzanie portalu wydaje się produktywne, ale regularnie pomija nieaktywne konta, ryzykowne udostępnia

Automatically translated with AI from the original post. Read the English original

▶ BLOGStop Wasting Money: Howto Automate Microsoft…M365.FM
Titelbild: Stop Wasting Money: How to Automate Microsoft 365 License Optimization with PowerShell

Witamy ponownie na blogu! Jeśli zarządzasz dzierżawą Microsoft 365, na pewno znasz to nieprzyjemne uczucie, gdy na koniec miesiąca otwierasz fakturę. Widzisz dziesiątki, a może setki aktywnych licencji przypisanych do użytkowników, którzy nie logowali się od poprzedniego roku obrotowego. Ręczne sprawdzanie portalu wydaje się produktywne, ale regularnie pomija nieaktywne konta, ryzykowne udostępnianie i ogromne straty na licencjach. Jeśli masz już dość doraźnego przeglądania centrum administracyjnego i nieprzyjemnych niespodzianek podczas kwartalnych audytów, nadszedł czas, aby włączyć automatyzację do swojego procesu pracy.

W tym wpisie szczegółowo omówimy, jak napisać zaplanowany skrypt PowerShell, który porównuje dzienniki logowania z aktywnymi licencjami. Po lekturze tego przewodnika będziesz wiedzieć, jak oznaczać nieużywane jednostki SKU, co miesiąc odzyskiwać zbędne koszty i chronić dzierżawę przed rozrastającym się obciążeniem administracyjnym.

Wprowadzenie do optymalizacji licencji Microsoft 365

Optymalizacja licencji jest często postrzegana jako bolesny obowiązek raz w roku. Menedżerowie IT w pośpiechu pobierają ręczne eksporty, dopytują kierowników działów, czy kontraktorzy nadal współpracują z firmą, i zgadują, czy konto jest faktycznie porzucone. Takie reaktywne podejście gwarantuje zmarnowany budżet. Każdego dnia, w którym odeszły kontraktor lub pracownik nadal posiada licencję E5 lub Business Premium, organizacja traci pieniądze.

Aby to naprawić, musimy traktować optymalizację licencji jako ciągły, zautomatyzowany proces. Wykorzystując PowerShell i Microsoft Graph, możemy tworzyć skrypty, które wykonają za nas ciężką pracę, dostarczając praktycznych danych, zanim wypijemy poranną kawę.

Dlaczego ręczne sprawdzanie portalu nie wystarcza

Dlaczego nie polegać wyłącznie na natywnym centrum administracyjnym Microsoft 365? Portal został zaprojektowany z myślą o wygodzie, a nie o głębokim zarządzaniu. Logując się do interfejsu webowego, widzisz migawki z konkretnego momentu, bez kontekstu historycznego. Portal nie pozwala łatwo zestawić dat ostatniego logowania z konkretnymi jednostkami SKU licencji u tysięcy użytkowników w jednym, czytelnym widoku.

Co więcej, ręczne sprawdzanie w całości zależy od ludzkiej pamięci. Czy pamiętałeś o sprawdzeniu kont usługowych? Czy zweryfikowałeś, czy to udostępniona skrzynka naprawdę potrzebuje licencji Exchange Online Plan 2? Błędy ludzkie prowadzą do martwych punktów, a te martwe punkty kosztują pieniądze i stwarzają zagrożenia dla bezpieczeństwa.

Wybór odpowiednich modułów i zakresów PowerShell

Zanim napiszesz choćby jedną linijkę logiki skryptu, musisz przygotować zestaw narzędzi. Ekosystem PowerShell firmy Microsoft ewoluował, a poleganie na przestarzałych modułach prowadzi jedynie do ostrzeżeń o wycofaniu i działających niepoprawnie skryptów. Twój podstawowy zestaw narzędzi powinien obejmować:

Pamiętaj o zasadzie najmniejszych uprawnień podczas nadawania uprawnień skryptom. Never używaj poświadczeń Administratora globalnego w zautomatyzowanych skryptach.

Definiowanie cotygodniowych raportów audytu tylko do odczytu

Złota zasada automatyzacji w IT jest prosta: najpierw tylko odczyt. Nigdy nie zaczynaj drogi z automatyzacją od skryptów, które automatycznie usuwają użytkowników lub odbierają licencje. Pierwsza iteracja powinna koncentrować się wyłącznie na zbieraniu danych.

Ustaw cotygodniowy harmonogram, który uruchamia kompleksowy audyt tylko do odczytu. Audyt ten powinien oceniać nieaktywnych użytkowników, listy dostępu gości, przypisanie licencji w porównaniu z rzeczywistą aktywnością logowania, konfiguracje skrzynek oraz osierocone grupy Microsoft 365. Dzięki ustalonemu cotygodniowemu rytmowi chaotyczne gaszenie pożarów zastąpisz dziesięciominutowym przeglądem czystych, automatycznie wygenerowanych raportów.

Zestawianie dzienników logowania z aktywnymi licencjami

Sekretem optymalizacji licencji jest zestawianie danych. Licencja przypisana do konta użytkownika nie ma znaczenia, jeśli ten użytkownik nie uwierzytelnił się od 90 dni. Twój skrypt musi pobrać dwa podstawowe zestawy danych z Microsoft Entra ID:

  1. Przypisane do użytkownika jednostki SKU licencji.
  2. Datę ostatniego logowania użytkownika (interaktywnego i nieinteraktywnego).

Łącząc te dwa zestawy danych za pomocą obiektów PowerShell, możesz od razu obliczyć marnotrawstwo licencji. Jeśli ostatnie logowanie użytkownika przekracza określony próg (na przykład 60 lub 90 dni), skrypt oznacza takie konto jako kandydata do odzyskania licencji.

Automatyzacja dostarczania raportów i przechowywania artefaktów

Raport, który leży w cichości w lokalnym katalogu, jest bezużyteczny. Musisz przekazać wnioski bezpośrednio osobom, które mogą podjąć działania. Skonfiguruj skrypt tak, aby generował uporządkowane pliki CSV oraz czytelne podsumowania w formacie HTML.

Następnie niech skrypt wyśle podsumowanie e-mailem na listę dystrybucyjną zespołu ds. ładu IT lub opublikuje je bezpośrednio w dedykowanym kanale w usłudze Microsoft Teams za pośrednictwem webhooka. Dodatkowo przechowuj surowe artefakty CSV w bezpiecznej bibliotece dokumentów SharePoint dla ładu, abyś miał historyczny ślad dokumentacji na potrzeby zgodności z przepisami.

Bezpieczne planowanie z Azure Automation i Harmonogramem zadań

Gdzie powinny znajdować się te skrypty? Możesz uruchamiać je z komputera lokalnego lub z serwera Windows Server za pomocą Harmonogramu zadań, korzystając z bezpiecznego magazynu poświadczeń, jednak podejściem klasy korporacyjnej jest Azure Automation.

Wdrażając skrypty jako runbooki Azure Automation i uwierzytelniając się za pomocą tożsamości zarządzanej, eliminujesz ryzyko zakodowanych na stałe haseł oraz wygasających sekretów jednostek usługi. Azure Automation sprawnie obsługuje środowisko wykonawcze, rejestrowanie zdarzeń i obsługę błędów w chmurze.

Wdrażanie zabezpieczeń i zasad zgodności

Automatyzacja bez zabezpieczeń to katastrofa czekająca na moment. Aby chronić swoją dzierżawę, wbuduj w potok automatyzacji następujące zabezpieczenia:

Etapowe wdrażanie strategii naprawczej

Nie próbuj automatyzować wszystkiego od pierwszego dnia. Wdrażaj strategię naprawczą w jasno określonych etapach:

Rozwiązywanie typowych problemów w automatyzacji PowerShell

Nawet najlepsze skrypty napotykają przeszkody. Jeśli otrzymujesz puste wyniki, dokładnie sprawdź uprawnienia Graph oraz wersje modułów — przetestuj zapytanie w Graph Explorer, aby wyizolować problem. Jeśli występują losowe awarie, Twój skrypt prawdopodobnie trafia w limity ograniczania przepustowości. Wdróż wykładniczy mechanizm ponawiania prób (exponential backoff), aby zapewnić stabilność uruchomień. Wreszcie uważaj na wyniki fałszywie dodatnie, utrzymując solidną listę wykluczeń dla kont usług i kont awaryjnych („break-glass”).

Często zadawane pytania

Czy automatyzacja zepsuje moją dzierżawę?

Nie, jeśli zaczniesz w trybie tylko do odczytu, dodasz zatwierdzanie i ściśle ograniczysz uprawnienia przyznane kontom automatyzacji.

Czy potrzebuję teraz Graph PowerShell?

Tak, to nowoczesna droga naprzód. Używaj go razem z modułami Exchange Online i PnP, aby objąć wszystkie obszary administracyjne.

Jak szybko można zobaczyć zwrot z inwestycji?

Pierwsze cotygodniowe uruchomienie zwykle ujawnia zaskakująco dużo nieużywanych licencji i nieaktualnych kont gości, dając natychmiastowe możliwości redukcji kosztów.

A co z konfiguracjami wielogeograficznymi i dostawcami usług zarządzanych (MSP)?

Parametryzuj konfiguracje dzierżaw, centralizuj infrastrukturę rejestrowania i oznaczaj raporty wynikowe identyfikatorem dzierżawy, aby skalować rozwiązanie w wielu środowiskach.

Podsumowanie

Automatyzacja optymalizacji licencji Microsoft 365 to jeden z projektów o najwyższej dźwigni, jakie może podjąć administrator. Zatrzymuje miesięczne marnowanie wydatków na oprogramowanie, wzmacnia bezpieczeństwo przez porządkowanie nieaktualnych kont i uwalnia od żmudnych ręcznych sprawdzeń w portalu.

Jeśli chcesz obejrzeć kompletne omówienie tych koncepcji, w tym szczegółowe analizy skryptów na żywo i głębsze wskazówki architektoniczne, koniecznie zapoznaj się z powiązanym odcinkiem podcastu: Automate Microsoft 365 Tenant Cleanup with PowerShell. Posłuchaj już dziś i podnieś swoje umiejętności automatyzacji na wyższy poziom!

Microsoft Graph Microsoft 365 Exchange Online Microsoft 365 admin center PnP PowerShell SharePoint

Related articles

RSS