Automatyzacja optymalizacji licencji i audytów w Microsoft 365
By Mirko Peters ·
Witamy ponownie w blogu podcastu! Jeśli kiedykolwiek wpatrywałeś się w miesięczny rachunek za oprogramowanie Microsoft 365 i zastanawiałeś się, dlaczego płacisz za licencje, z których nikt nie korzysta od sześciu miesięcy, z pewnością nie jesteś w tym odosobniony…
Automatically translated with AI from the original post. Read the English original
Witamy ponownie w blogu podcastu! Jeśli kiedykolwiek wpatrywałeś się w miesięczny rachunek za oprogramowanie Microsoft 365 i zastanawiałeś się, dlaczego płacisz za licencje, których od sześciu miesięcy nikt nie użył, z pewnością nie jesteś w tym odosobniony. Zarządzanie licencjami to jeden z tych ukrytych kosztów operacyjnych, które po cichu wyczerpują budżety IT, jednocześnie generując niepotrzebne problemy związane ze zgodnością i bezpieczeństwem. Na szczęście mamy pod ręką potężne narzędzia do automatyzacji. W tym kompleksowym przewodniku przyjrzymy się, jak śledzić, przypisywać i odbierać licencje Microsoft 365 za pomocą PowerShell, aby kontrolować koszty, usprawnić onboarding i zapewnić ścisłą zgodność w całej dzierżawie. Jeśli lubisz zagłębiać się w techniczne strategie automatyzacji, koniecznie zajrzyj do naszego powiązanego odcinka o tym, jak Run Your Full Stack Locally with .NET Aspire, gdzie znajdziesz więcej informacji o przepływach pracy i narzędziach dla deweloperów.
Wprowadzenie do automatyzacji optymalizacji licencji i audytów
Ręczne zarządzanie dzierżawą Microsoft 365 to prosta droga do wypalenia i błędów ludzkich. Wraz z rozwojem organizacji zmienia się skład pracowników, działy są reorganizowane, a wymagania dotyczące oprogramowania potrafią gwałtownie się zmieniać. Jeśli nie będziemy tego kontrolować, administratorzy zaczynają gromadzić licencje, nadal płacą za byłych współpracowników zewnętrznych lub pozostawiają drogie licencje E5 przypisane do nieaktywnych kont. Wprowadzając automatyzację do strategii optymalizacji licencji, eliminujesz zgadywanie. PowerShell pozwala odpytywać dane dzierżawy, analizować wzorce wykorzystania i programowo odzyskiwać nieużywane zasoby, zamieniając reaktywne zadanie administracyjne w proaktywne zabezpieczenie finansowe.
Wymagania wstępne i konfiguracja środowiska
Zanim napiszesz choćby jedną linijkę kodu do odzyskiwania licencji, musisz przygotować środowisko. Odpowiednie przygotowanie zapewnia, że skrypty będą działać płynnie, bez napotykania przeszkód związanych z uprawnieniami lub konfliktami modułów.
Obsługiwane systemy
Skrypty do zarządzania Microsoft 365 można uruchamiać zarówno w systemach Windows, jak i macOS. Większość administratorów woli Windows 10 lub nowszy, a użytkownicy komputerów Mac mogą korzystać z PowerShell Core. Upewnij się, że system operacyjny obsługuje najnowsze pakiety modułów. Jeśli podczas łączenia z usługami napotkasz błędy integracji Web Account Manager (WAM) lub konflikty zależności zestawów, tymczasowe obejścia, takie jak przełącznik DisableWAM, pozwolą utrzymać działanie skryptów.
Uprawnienia i role
Bezpieczeństwo jest najważniejsze. Nigdy nie uruchamiaj skryptów administracyjnych na koncie zwykłego użytkownika. Upewnij się, że tożsamość, na której działa skrypt, posiada odpowiednie role, takie jak Global Administrator, User Administrator lub License Administrator. Przestrzeganie zasady najmniejszych uprawnień gwarantuje, że poświadczenia administracyjne mają wyłącznie uprawnienia niezbędne do przeprowadzania audytów i przydziałów licencji.
Lista kontrolna konfiguracji środowiska
- Otwórz Windows PowerShell jako administrator.
- Ustaw PowerShell Gallery jako zaufane repozytorium:
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted - Zainstaluj wymagienie dostawcę NuGet, jeśli zostaniesz o to poproszony.
- Skonfiguruj zasady wykonywania skryptów:
Set-ExecutionPolicy RemoteSigned
Instalacja podstawowych modułów PowerShell dla Microsoft 365
Aby skutecznie zarządzać użytkownikami i licencjami, musisz mieć lokalnie zainstalowane odpowiednie zestawy narzędzi. Ekosystem Microsoft w dużym stopniu przeszedł na zunifikowane zestawy SDK, jednak kilka podstawowych modułów nadal jest kluczowych w codziennych zadaniach administracyjnych.
Przegląd modułów
- Microsoft.Graph: nowoczesny, zunifikowany moduł zastępujący starsze narzędzia, takie jak MSOnline i AzureAD.
- ExchangeOnlineManagement: niezbędny do zarządzania skrzynkami pocztowymi, konwersji współdzielonych skrzynek pocztowych oraz śledzenia przepływu poczty.
- MicrosoftTeams: niezbędny do zarządzania obciążeniami współpracy i zasadami spotkań.
Kroki instalacji
Podstawowe nowoczesne moduły zainstalujesz, wykonując poniższe polecenia w podniesionym wierszu poleceń PowerShell:
Install-Module -Name Microsoft.Graph -Scope CurrentUser -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -Force
Install-Module -Name MicrosoftTeams -Scope CurrentUser -ForceZawsze sprawdzaj instalacje za pomocą Get-InstalledModule, aby upewnić się, że konfliktujące wersje nie zakłócą działania Twoich runbooków automatyzacji.
Łączenie PowerShell z dzierżawą Microsoft 365
Nawiązanie bezpiecznego i niezawodnego połączenia z dzierżawą to kolejny kluczowy krok. Nowoczesne standardy uwierzytelniania wymagają solidnych podejść, szczególnie gdy skrypty działają bez nadzoru lub są uruchamiane według harmonogramu.
Opcje uwierzytelniania
Logowanie interaktywne świetnie nadaje się do szybkich, doraźnych zadań administracyjnych, ale skrypty automatyzacji działające w tle wymagają bezpiecznych alternatyw. Uwierzytelnianie oparte na certyfikatach lub tożsamości zarządzane pozwalają bezpiecznie się połączyć bez wpisywania haseł na sztywno w plikach skryptów w postaci zwykłego tekstu.
Łączenie z usługami Graph i innymi usługami
Aby połączyć się z zapleczem Microsoft Graph na potrzeby zarządzania użytkownikami i licencjami, użyj polecenia:
Connect-MgGraph -Scopes "User.ReadWrite.All", "Organization.Read.All"W przypadku obciążeń specyficznych dla usługi Exchange oraz konfiguracji skrzynek pocztowych nawiąż sesję za pomocą polecenia:
Connect-ExchangeOnlineGdy skrypt zakończy wykonywanie operacji wsadowych, pamiętaj o zamknięciu sesji, uruchamiając Disconnect-ExchangeOnline lub Disconnect-MgGraph.
Audyt nieużywanych miejsc licencyjnych i inwentaryzacja licencji
Optymalizacja licencji zaczyna się od widoczności. Nie odzyskasz miejsc licencyjnych, jeśli nie wiesz, kto ich używa, a kto je porzucił. Korzystając z PowerShell, możesz wygenerować kompleksowe raporty inwentaryzacyjne ze szczegółami przypisanych jednostek SKU oraz znacznikami czasu ostatniego logowania.
Sprawdzanie subskrybowanych jednostek SKU
Aby sprawdzić łączną pulę zakupionych licencji dzierżawy w porównaniu z liczbą dostępnych, uruchom następujące polecenie:
Get-MgSubscribedSku | Select-Object SkuId, SkuPartNumber, @{Name="Total";Expression={$_.ConsolidatedStatus}}, @{Name="Assigned";Expression={$_.AssignedUnits}}Wyszukiwanie nieaktywnych użytkowników
Szybkim sposobem na znaczne ograniczenie zbędnych kosztów chmury jest wskazanie kont, które nie uwierzytelniały się od ponad 90 dni. Listy użytkowników możesz filtrować, aby znaleźć nieaktywne konta:
$Threshold = (Get-Date).AddDays(-90)
Get-MgGet-MgUser -All -Property Id, DisplayName, UserPrincipalName, SignInActivity | Where-Object { $_.SignInActivity.LastSignInDateTime -lt $Threshold }Eksport tych danych do pliku CSV pozwala przedstawić kierownictwu IT jasne wskaźniki oszczędności, zanim przystąpisz do masowego usuwania licencji.
Używanie Set-MgUserLicense do przypisywania i odbierania licencji
Gdy zidentyfikujesz niewykorzystane miejsca licencyjne lub nowych pracowników wymagających wdrożenia, podstawowym mechanizmem zmian staje się poleceniewe Set-MgUserLicense.
Programowe przypisywanie licencji
Aby przypisać określoną jednostkę SKU nowemu użytkownikowi, skonstruuj obiekt przypisania licencji zawierający identyfikator SkuId docelowej jednostki:
$Params = @{
AddLicenses = @(
@{
SkuId = "your-sku-guid-here"
}
)
RemoveLicenses = @()
}
Set-MgUserLicense -UserId "alex.johnson@contoso.com" -BodyParameter $ParamsOdbieranie nieużywanych licencji
Odbierając licencje kontom nieaktywnym lub pracownikom, którzy odeszli z organizacji, odwracasz operację, przekazując identyfikator SKU do tablicowego parametru RemoveLicenses. Dzięki temu organizacja natychmiast przestaje płacić za niewykorzystywane zasoby chmury.
Automatyzacja przepływów pracy licencji przy wdrażaniu i wyrejestrowywaniu użytkowników
Ręczne tworzenie i usuwanie kont użytkowników wprowadza znaczne opóźnienia i zagrożenia dla bezpieczeństwa. Tworząc skrypty dla przepływów wdrażania i wyrejestrowywania, zapewniasz, że licencje są przydzielane w chwili dołączenia pracownika i natychmiast odbierane w dniu jego odejścia.
Zautomatyzowany skrypt wyrejestrowywania może wyłączyć konto użytkownika, odebrać przypisane mu licencje, przekształcić jego skrzynkę pocztową w zasób współdzielony i wyeksportować ścieżki audytu do bezpiecznej lokalizacji przechowywania — wszystko w ramach jednego, ciągłego bloku wykonania. Taki poziom synchronizacji eliminuje marnowanie licencji i chroni stan bezpieczeństwa organizacji.
Najlepsze praktyki bezpieczeństwa i zasada najmniejszych uprawnień
Automatyzacja daje ogromną moc, dlatego musi być ściśle nadzorowana. Przestrzeganie rygorystycznych zasad bezpieczeństwa chroni dzierżawę przed przypadkowymi błędami konfiguracji i złośliwym wykonaniem skryptów.
- Zasada najmniejszych uprawnień: Nigdy nie przydzielaj uprawnień administratora globalnego kontom usług używanym przez automatyzację. Ogranicz uprawnienia ściśle do tego, czego skrypt faktycznie potrzebuje.
- Bezpieczeństwo poświadczeń: Nigdy nie przechowuj haseł w postaci zwykłego tekstu w skryptach. Używaj usługi Azure Key Vault, tożsamości zarządzanych lub uwierzytelniania certyfikatem.
- Kompleksowe rejestrowanie: Stosuj solidne bloki try/catch i zapisuj kroki wykonania skryptu w dziennikach lokalnych lub chmurowych, aby zapewnić pełną identyfikowalność.
Rozwiązywanie typowych błędów licencji i połączeń
Nawet doświadczeni administratorzy od czasu do czasu napotykają przeszkody podczas uruchamiania skryptów automatyzacji Microsoft 365. Zrozumienie, jak obsługiwać te błędy, pozwoli zaoszczędzić wiele godzin frustracji.
- Błędy odmowy dostępu: Sprawdź, czy konto wykonujące skrypt posiada wymagane role katalogu Azure AD oraz czy połączenie z Graph zażądało prawidłowych zakresów zgody.
- Niepowodzenia przypisania licencji: Upewnij się, że użytkownik ma skonfigurowaną lokalizację użycia („Usage Location”). Microsoft 365 odrzuci przypisanie licencji, jeśli pole kraju użytkownika jest puste.
- Konflikty modułów: Jeśli polecenia cmdlet kończą się błędem z powodu konfliktujących wersji modułów, całkowicie odinstaluj przestarzałe moduły (takie jak MSOnline) i ujednolić środowisko, przechodząc na nowoczesny zestaw Microsoft Graph SDK.
Podsumowanie
Automatyzacja optymalizacji licencji i audytów w Microsoft 365 łączy sprawną administrację IT z przemyślanym zarządzaniem finansami. Dzięki PowerShell i cmdletom takim jak Set-MgUserLicense możesz wyeliminować zbędne wydatki na oprogramowanie, egzekwować rygorystyczną zgodność z wymogami bezpieczeństwa i usprawnić procesy zarządzania użytkownikami w całej organizacji. Jeśli chcesz poszerzyć swoje techniczne horyzonty o nowoczesne narzędzia i zarządzanie infrastrukturą, koniecznie zajrzyj do powiązanego odcinka o tym, jak uruchomić cały stos lokalnie za pomocą .NET Aspire. Działaj proaktywnie, dbaj o bezpieczeństwo swoich skryptów i przekształć swoją dzierżawę Microsoft 365 w dobrze naoliwiony, zoptymalizowany pod kątem kosztów mechanizm!