Komputery w Twojej firmie są restartowane od święta i nie wiesz, co z tym zrobić? Spokojnie, mam pomysł na rozwiązanie Twojego problemu - Custom Compliance policy w Intune.

Stwórzmy razem nową politykę w Microsoft Intune, która będzie oznaczać urządzenia zapominalskich użytkowników, a potem, jeśli zechcesz, zablokuj im dostęp do aplikacji Microsoft 365. Gotowy? Zaczynamy!

Ale o co chodzi?

Skąd pomysł na taką politykę i dlaczego IT znowu robi dramę z niczego? To dobre pytanie! Dlaczego musimy zmuszać pracowników do regularnego restartowania firmowych urządzeń? Zróbmy listę potencjalnych problemów.

  1. Co robi się przed wysłaniem zgłoszenia do IT? - Restart komputera. Zgłaszany problem może się sam magicznie naprawić tylko przez to jedno konkretne działanie 🪄
  2. Niektóre sterowniki i aplikacje wymagają pełnego restartu urządzenia po instalacji lub aktualizacji, a my zawsze chcemy mieć aktualne oprogramowanie na komputerach.
  3. Ustawienia Group Policy, Task Scheduler i inne akcje ustawione na wykonanie podczas startu lub wyłączenia komputera - nie zadziałają, bo komputer nie jest wyłączany / restartowany!

Myślę, że tyle wystarczy. Jeśli jesteś kimś, kto nie wyłącza regularnie swojego komputera - proszę, zacznij to robić 🥺 A jeśli jesteś po drugiej strony barykady i chcesz zmusić pracowników do cyklicznych restartów firmowych urządzeń, zapraszam do dalszej lektury wpisu.

Możliwe rozwiązania problemu

Zastanówmy się, jak możemy zachęcić naszych pracowników do regularnego restartowania swoich urządzeń.

  1. Komunikaty w firmowych mediach, takich jak wewnętrzny blog, poczta e-mail, Microsoft Teams, Yammer czy inne HR-owe zło, z prośbą od działu IT o wyłączanie służbowego komputera po zakończeniu pracy.
  2. Systemowe powiadomienia dla użytkowników z prośbą o restart urządzenia po przekroczeniu maksymalnego czasu aktywności urządzenia. Psst: Inne przykłady PowerShellowych powiadomień (toast notifications) znajdziesz tutaj.
  3. Automatyczne wymuszenie restartu komputera po przekroczeniu maksymalnego czasu aktywności urządzenia.

Czy to zadziała? Opcja nr 1 tak, jednak tylko dla osób, które czytają takie komunikaty i są na tyle uprzejme, aby się do nich stosować. Opcja nr 2, bez wymuszenia opcji nr 3, zazwyczaj nie przyniesie rezultatów. Użytkownicy często nie zwracają uwagi na tego typu powiadomienia i nie wiedzą, że istnieje coś takiego jak Notification Center (kto by tam zagląda? 🙃). Natomiast najbardziej skuteczna opcja nr 3 może doprowadzić do utraty danych pracownika, jeśli IT wymusi restart, a użytkownik nie zapisze nigdzie super ważnej firmowej prezentacji, nad którą pracował przez wiele godzin!

Trzeba więc znaleźć jakieś rozwiazanie, które zachęci pracowników do restartowania ich komputerów, ale z minimalnym ryzykiem utraty firmowych danych. I tutaj pojawia się nasze dzisiejsze rozwiązanie - Custom Compliance w Intune oraz Conditional Access 🙂

Przepis na problematycznych użytkowników

Na czym polega nasz diabelski plan?

Firmowe urządzenia podlegają politykom zgodności w Intune. Jeśli służbowy komputer nie ma zaszyfrowanego dysku lub ma wyłączony firewall, Intune oznaczy takie urządzenie jako niezgodne. To brzmi jak coś, co chcielibyśmy wykorzystać! Jeśli komputer pracownika będzie pracował dłużej niż 7 dni, oznaczmy go jako niezgodny w Intune i zablokujmy dostęp do aplikacji chmurowych.

Dodatkowo niedobre IT zapewni możliwość samodzielnego rozwiązania problemu poprzez status i instrukcje w Company Portal, a ważne pliki będzie można zapisać lokalnie przed restartem komputera!

Custom Compliance Policy

Czym różni się nasza dzisiejsza polityka od innych wbudowanych polityk w Intune? Różnica jest kosmentyczna - zamiast gotowych ustawień i suwaków w admin center, sami musimy przygotować logikę (skrypt PowerShell) oraz komunikaty dla pracowników w Company Portal. Daje nam to większe możliwości weryfikacji zgodności, ale jednocześnie wymaga od nas większego nakładu pracy.

Opcja Custom Compliance Policy składa się z dwóch elementów:

  1. Discovery script - to skrypt PowerShell, który weryfikuje zgodność danego urządzenia oraz przesyła ją z powrotem do Intune.
  2. Custom Compliance Settings JSON - to plik JSON, który zawiera komunikaty dla użytkownika oraz opis użytych parametrów w Discovery script dla Intune.

Bez obaw! Nikt nie będzie zmuszał Cię tu do kodowania. Przygotowałem już oba pliki dla dzisiejszej polityki. Znajdziesz je na moim repo na GitHub.

Konfiguracja

Czas stworzyć nasze dzieło zniszczenia! Zanim jednak zaczniemy, pamiętaj że zarówno korzystanie z Conditional Access, jak i Intune, wymaga odpowiednich licencji.

I zgodnie z blogowym FAQ za zmiany na produkcji odpowiadasz wyłącznie Ty - nie przyjmuję żadnych reklamacji.

Skrypty

Pobieramy pliki:

oraz dostosowujemy je do swoich potrzeb. Domyślnie Discovery script oznacza komputery bez restartu powyżej 7 dni jako niezgodne.

Discovery script

Przechodzimy do Microsoft Intune admin center i wybieramy: Devices -> Compliance policies -> Scripts. Następnie klikamy Add > Windows 10 and later.

Uzupełniamy nazwę oraz opis naszego skryptu (opcjonalnie), który później będziemy wskazywać w compliance policy.

Następnie przechodzimy dalej (do zakładki Settings) i wklejamy zawartość pliku DeviceRebootedWithin7Days_Discovery.ps1.

Pozostałe ustawienia przełączamy na:

  1. Run this script using the logged on credentials: No
  2. Enforce script signature check: No
  3. Run script in 64 bit PowerShell Host: Yes

Ostatni krok (zakładka Review + create) to weryfikacja, czy wszystkie ustawienia zostały odpowiednio skonfigurowane. Potwierdzamy zmiany klikając przycisk Create.

Gotowe - Discovery script został utworzony. Teraz musimy stworzyć nową compliance policy, która będzie z niego korzystać do weryfikacji zgodności naszych urządzeń.

Compliance policy

Aby utworzyć nową compliance policy przechodzimy do: Devices -> Compliance policies -> Policies i klikamy na +Create policy.

Z menu wybieramy Platform: Windows 10 and later, a Profile type powinien automatycznie ustawić się na Windows 10/11 compliance policy.

Ponownie uzupełniamy nazwę i opcjonalnie opis polityki. Następnie przechodzimy do zakładki Compliance settings, gdzie rozwijamy kategorię Custom Compliance i konfigurujemy:

  1. Custom compliance: Require
  2. Select your discovery script: Skrypt utworzony chwilę wcześniej - w moim przypadku Discovery-Windows-DeviceRebootedWithin7Days.
  3. Upload and validate the JSON file with your custom compliance settings: Wskazujemy pobrany plik DeviceRebootedWithin7Days_ComplianceSettings.json

Przechodzimy dalej i ustawiamy akcje polityki. Oczywiście chcemy, aby Intune oznaczał urządzenia, które nie zostały zrestartowane w ciągu ostatnich 7 dni jako niezgodne.

Upewniamy się, że akcja Mark device noncompliant jest ustawiona na wartość 0 (Immediately) i przechodzimy dalej.

Czas na przypisanie naszej polityki do wybranej grupy użytkowników.

Chociaż opcje Add all users i Add all devices wydają się kuszące, dla potrzeb testów lepiej wskazać konkretną grupę z testowymi użytkownikami - nie wiemy, kto jeszcze korzysta z naszego środowiska testowego i nie chcemy niczego popsuć 🙃

Wskazujemy grupę userów i przechodzimy dalej.

Ostatni krok (zakładka Review + create) to weryfikacja, czy wszystkie ustawienia zostały odpowiednio skonfigurowane. Potwierdzamy zmiany klikając przycisk Create.

Gotowe! Czas na testy!

Testy

Polityki zostały utworzone, czas na testy. Przechodzimy do naszej testowej maszyny lub urządzenia i czekamy, aż czas od ostatniego uruchomienia systemu przekroczy 7 dni

…lub jeśli jesteś niecierpliwy (jak ja), możesz zmienić wartości w skrypcie, aby przyspieszyć ten proces.

Przyspieszenie skryptu

Ustaw zmienną: $maximumDays na 1 oraz przestaw metodę polecenia w $lastRestartDays z .Days na .Hours.

Po tych drobnych korektach Twoje komputery powinny być oznaczane jako niezgodne zaledwie po godzinie pracy urządzenia!

Teraz pozostało nam poczekać, aż nasz testowy komputer / urządzenie przekroczy godzinę czasu pracy i stanie się niezgodne z naszą polityką.

Czas na weryfikację zgodności komputera. Na początek sprawdźmy czas pracy komputera w Task Manager.

Wygląda w porządku! Przejdźmy do Company Portal i sprawdźmy status zgodności urządzenia:

Sukces! Nasz komputer stał się niezgodny, a użytkownik otrzymał komunikat zapisany w ustawieniach polityki.

Czas otworzyć szampana i podsumować, co udało się nam dzisiaj skonfigurować 🥂

Zanim jednak to zrobimy, przejdźmy przez krótkie FAQ, ponieważ w trakcie swoich testów możesz napotkać problemy, o których nic wcześniej nie wspomniałem.

Potencjalne problemy i FAQ

Blokada dostępu do firmowych zasobów

Stan Not Compliant w Intune sam w sobie nie blokuje dostępu do usług Microsoft 365 ani innych zintegrowanych aplikacji z Entra ID. Jeśli chcesz zablokować niezgodne z compliance policies urządzenia, konieczne jest utworzenie nowej polityki Conditional Access.

Instrukcja

Przejdź do Microsoft Entra admin center i wybierz: Protection -> Conditional Access -> Policies. Następnie utwórz politykę z następującymi warunkami:

  1. Users
    • [Include]: Wskaż grupę zawierającą testowych użytkowników, których chcesz zablokować
    • [Exclude]: Wyklucz swoje konto i konta Break Glass Accounts
  2. Target resources: Wybierz All cloud apps
  3. Conditions: Nie musisz nic zaznaczać, jednak warto ustawić Device platforms = Windows, ponieważ dla tej platformy konfigurowaliśmy politykę.
  4. Grant: [x] Grant access + Require device to be marked as compliant
  5. Enable policy: On

Gotowe. Dostęp do zasobów firmowych zostanie zablokowany z urządzeń ze statusem Not Compliant.

Fast startup - Nieprawidłowy czas pracy komputera

Podczas testowania polityki lub skryptów może się zdarzyć, że nawet po ponownym uruchomieniu Twój komputer nadal będzie zgłaszał niezgodność. Dlaczego? Winne jest ustawienie o nazwie fast startup, które uniemożliwia urządzeniu przeprowadzenie pełnego restartu, ale za to zwiększa szybkość jego uruchamiania!

Starting with Windows 8.x, the default shutdown and restart scenario has been updated and named fast startup. Fast startup begins with the shutdown process and includes writing data to disk similar to the hibernate process. A key difference is that all user sessions (Session 1) are logged off and the remaining information is written to the hiberfile. When you boot the PC from this state, Windows loads the previously initialized state by reading from the hiberfile, instead of running the full boot process in which Windows, drivers, devices, and services are initialized. This method speeds up the process of initializing the lock or Start screen.

Microsoft Docs - Delivering a great startup and shutdown experience - Fast startup

Tak więc, opcja Zamknij w menu start nie zawsze oznacza pełne wyłączenie komputera…

Jeśli chcesz zmienić to domyślne zachowanie systemu Windows, polecam wyłączenie fast startup przed implementacją opisywanej we wpisie polityki.

PS: Wake-on-LAN nie działa z włączonym fast startup 🙂

Czas oczekiwania na synchronizację polityk i zgodności urządzenia

Polityki Custom Compliance w Intune zachowują się nieco inaczej niż wbudowane polityki zgodności. Chodzi mi tutaj o czas jaki Intune potrzebuje na pierwsze i ponowne uruchomienie skryptu Discovery.

Według dokumentacji, synchronizacja zgodności urządzenia odbywa się co 8 godzin. Niestety, to nie żart… dlatego Custom Compliance nie nadaje się do weryfikacji ustawień, które musimy odczytywać i raportować w czasie rzeczywistym.

When a Windows device receives a compliance policy with custom settings, it checks for the presence of Intune Management Extensions. If not found, the device runs an MSI that installs the extensions, enabling the client to download and run PowerShell scripts that are part of a compliance policy, and to upload compliance results. Actions managed by the services include:

  • Checking for new or updated PowerShell scripts every eight hours.
  • Running the discovery scripts every eight hours.
  • Running scripts that download when a user selects Check Compliance on the device. However, there is no check for new or updated scripts when Check Compliance is run.

It is not possible to push notifications to a device to enable custom compliance to run on demand.

Microsoft Docs - Use custom compliance policies and settings for Linux and Windows devices with Microsoft Intune

Manualna weryfikacja

Po kliknięciu przycisku Check Compliance w Company Portal, Intune Management Extension zweryfikuje zgodność naszego komputera z Custom Compliance i przekaże ją do Intune za pomocą kopii skryptu Discovery, która jest przechowywana lokalnie na urządzeniu.

Jest to jednak działanie ręczne - Pracownik musi kliknąć Check Compliance, inaczej obowiązuje domyślny harmonogram - 8 godzin.

PS: Czarodzieje potrafią obejść i ten problem, ale nie oszukujmy się - nie chcemy korzystać z takich sztuczek w środowiskach produkcyjnych, jeśli nie ma takiej konieczności.

Podsumowanie

Gratulacje, udało Ci się dotrzeć do końca wpisu. Teraz czas na małe podsumowanie:

  1. Udało nam się skonfigurować Custom Compliance w Intune - brawo my!
  2. Polityka została poprawnie zastosowana na urządzeniu, i byliśmy zgodni z nowymi politykami.
  3. Po godzinie (realnie po dwóch i wymuszeniu synchronizacji) nasz testowy komputer otrzymał status Not Compliant, co zostało odnotowane w Company Portal.
  4. Żadne zwierzęta nie ucierpiały w trakcie naszych testów.

A teraz pora na pożegnanie i… życzenia noworoczne!

W nadchodzącym 2024 roku życzę Wam, drodzy czytelnicy, mnóstwa energii do realizacji ciekawych projektów, szybszych synchronizacji polityk Intune oraz dużo cierpliwości i współpracowników, którzy nie otwierają wszystkich linków w otrzymywanych wiadomościach 💣

Do zobaczenia w kolejnym wpisie!

Dodatkowe materiały

  1. Custom compliance discovery scripts for Microsoft Intune
  2. Custom compliance JSON files for Microsoft Intune
  3. Using PowerShell to get the real device uptime even with fast startup enabled
  4. Create a device-based Conditional Access policy