<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Intune on Nicola Suter</title><link>https://tech.nicolonsky.ch/tags/intune/</link><description>Recent content in Intune on Nicola Suter</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><copyright>© 2026 Nicola Suter</copyright><lastBuildDate>Thu, 04 Dec 2025 20:00:07 +0000</lastBuildDate><atom:link href="https://tech.nicolonsky.ch/tags/intune/rss.xml" rel="self" type="application/rss+xml"/><item><title>Did you hear that maester supports Intune?</title><link>https://tech.nicolonsky.ch/maester-tests-intune/</link><pubDate>Thu, 04 Dec 2025 20:00:07 +0000</pubDate><guid>https://tech.nicolonsky.ch/maester-tests-intune/</guid><description>&lt;p&gt;Did you know that the &lt;a href="https://maester.dev/" target="_blank" rel="noreferrer"&gt;maester&lt;/a&gt; framework now supports Microsoft Intune checks? In this blog post, I&amp;rsquo;ll give you a quick overview of the new capabilities and how to get started.&lt;/p&gt;

&lt;h2 class="relative group"&gt;About Maester
 &lt;div id="about-maester" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#about-maester" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Maester is an open-source security assessment framework that helps you evaluate the security posture of your Microsoft Entra ID and Microsoft 365 environments. It provides a collection of tests that can be run against your tenant to identify potential misconfigurations and security risks.&lt;/p&gt;
&lt;p&gt;After executing the tests, maester generates a detailed report that highlights the findings and provides recommendations for remediation:&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Maester Example"
 src="https://tech.nicolonsky.ch/content/images/2025/maester-demo.jpeg"
 &gt;&lt;/figure&gt;

&lt;h2 class="relative group"&gt;Intune Related Checks
 &lt;div id="intune-related-checks" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#intune-related-checks" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The great thing about maester is that it&amp;rsquo;s highly extensible, allowing you to add custom tests and checks based on your specific requirements. To share some Intune best practices with the community, I contributed a set of Intune related checks to the maester framework.&lt;/p&gt;
&lt;p&gt;The following Intune checks are now available in maester:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MT.1090 - Global administrator role should not be added as local administrator on the device during Microsoft Entra join&lt;/li&gt;
&lt;li&gt;MT.1091 - Registering user should not be added as local administrator on the device during Microsoft Entra join&lt;/li&gt;
&lt;li&gt;MT.1092 - Intune APNS certificate should be valid for more than 30 days&lt;/li&gt;
&lt;li&gt;MT.1093 - Apple Automated Device Enrollment Tokens should be valid for more than 30 days&lt;/li&gt;
&lt;li&gt;MT.1094 - Apple Volume Purchase Program Tokens should be valid for more than 30 days&lt;/li&gt;
&lt;li&gt;MT.1095 - Android Enterprise account connection should be healthy&lt;/li&gt;
&lt;li&gt;MT.1096 - Ensure at least one Intune Multi Admin Approval policy is configured&lt;/li&gt;
&lt;li&gt;MT.1097 - Ensure all Intune Certificate Connectors are healthy and running supported versions&lt;/li&gt;
&lt;li&gt;MT.1098 - Mobile Threat Defense Connectors should be healthy&lt;/li&gt;
&lt;li&gt;MT.1099 - Windows Diagnostic Data Processing should be enabled&lt;/li&gt;
&lt;li&gt;MT.1100 - Intune Diagnostic Settings should include Audit Logs&lt;/li&gt;
&lt;li&gt;MT.1101 - Default Branding Profile should be customized&lt;/li&gt;
&lt;li&gt;MT.1102 - Windows Feature Update Policy Settings should not reference end of support builds&lt;/li&gt;
&lt;li&gt;MT.1103 - Ensure Intune RBAC groups are protected by Restricted Management Administrative Units or Role Assignable groups&lt;/li&gt;
&lt;li&gt;MT.1105 - Ensure MDM Authority is set to Intune&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Example
 &lt;div id="example" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#example" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;To run the tests you can simply run:&lt;/p&gt;</description></item><item><title>Retrieving Windows LAPS Azure AD Passwords with PowerShell</title><link>https://tech.nicolonsky.ch/retrieving-windows-laps-azure-ad-passwords-with-powershell/</link><pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/retrieving-windows-laps-azure-ad-passwords-with-powershell/</guid><description>&lt;p&gt;Did you know that for the new Windows LAPS Azure AD is also maintaining the password history? The built in PowerShell commandlet relies on the Microsoft Graph PowerShell SDK and within this post I want to show you how to work with the &lt;code&gt;Get-LapsAADPassword&lt;/code&gt; cmdlet.&lt;/p&gt;
&lt;p&gt;Kudos to &lt;a href="https://medium.com/u/b214ce59ec84" target="_blank" rel="noreferrer"&gt;Niklas Tinner&lt;/a&gt; as he brought this to my attention while working together.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Where is this command originating from?
 &lt;div id="where-is-this-command-originating-from" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#where-is-this-command-originating-from" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Get-LapsAADPassword&lt;/code&gt; cmdlet is part of the &lt;code&gt;LAPS&lt;/code&gt; PowerShell module that was baked into the Windows Operating system with the April 2023 quality updates.&lt;/p&gt;
&lt;p&gt;The module is maintained as part of the Operating System and builds the Interface to interact with Windows LAPS locally on a device. The module binaries reside within &lt;code&gt;C:\Windows\system32\WindowsPowerShell\v1.0\Modules\LAPS&lt;/code&gt; and consist of DLLs and PowerShell files:&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="static/content/images/1__qcPzW4MPs441N6xsGkF2sA.png"
 &gt;&lt;/figure&gt;

&lt;h3 class="relative group"&gt;Let’s retrieve some passwords
 &lt;div id="lets-retrieve-some-passwords" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lets-retrieve-some-passwords" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Before we can start retrieving passwords we need to make sure, that we have the appropriate &lt;a href="https://github.com/microsoftgraph/msgraph-sdk-powershell" target="_blank" rel="noreferrer"&gt;Microsoft Graph PowerShell SDK&lt;/a&gt; module present.&lt;/p&gt;
&lt;p&gt;We can easily check this with the following PowerShell command:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Get-Module&lt;/span&gt; &lt;span class="n"&gt;-Name&lt;/span&gt; &lt;span class="n"&gt;Microsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Graph&lt;/span&gt; &lt;span class="n"&gt;-ListAvailable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If you do not retrieve any output, you need to install the module with local Administrator privileges with:&lt;/p&gt;</description></item><item><title>Let's have a tête-à-tête with the new Windows LAPS for Azure AD joined devices</title><link>https://tech.nicolonsky.ch/meeting-windows-laps/</link><pubDate>Fri, 21 Apr 2023 18:56:24 +0000</pubDate><guid>https://tech.nicolonsky.ch/meeting-windows-laps/</guid><description>&lt;p&gt;Loooooong awaited and it&amp;rsquo;s finally here - the new Windows LAPS. With the previous announcement(s) of the integration into the native Windows operating system and support for Azure AD join this was a long-awaited feature. With the recent patch Tuesday the binaries were backed and delivered natively into the current Windows client and Server OS and today they also launched the Azure AD backend that can serve as the backup source for passwords. Within this post, I want to give you a quick impression of what the deployment experience currently looks like and where I needed some adjustments to get the expected result.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Setup
 &lt;div id="setup" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#setup" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Prerequisites
 &lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;To deploy LAPS with Azure AD password backup and Intune you need licenses/access to those tools and Windows 10/11 devices with the latest April patches installed. A full list of prerequisites is provided &lt;a href="https://learn.microsoft.com/en-us/windows-server/identity/laps/laps-overview#windows-laps-supported-platforms-and-azure-ad-laps-preview-status" target="_blank" rel="noreferrer"&gt;by Microsoft here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Azure AD enablement
 &lt;div id="azure-ad-enablement" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#azure-ad-enablement" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Unlike the on-premises AD LAPS enablement we do not need any schema extensions and can simply enable the following toggle within our Azure AD device settings:&lt;/p&gt;</description></item><item><title>You must not touch my endpoint security settings!</title><link>https://tech.nicolonsky.ch/you-must-not-touch-my-endpoint-security-settings/</link><pubDate>Sun, 12 Mar 2023 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/you-must-not-touch-my-endpoint-security-settings/</guid><description>&lt;p&gt;Intune Endpoint Security Configuration Settings have become the way to go for configuring security features on various platforms. What did start with Microsoft Defender for Endpoint settings for Windows clients has evolved to settings for macOS, Windows Servers and is treated like a first class citizen. So it is important to guard those sensitive configurations as they control (and can potentially disable) vital security features on endpoints such as defender tamper protection, attack surface reduction rules, firewall and many more.&lt;/p&gt;
&lt;p&gt;Within this post I want to show you an approach to monitor changes to Intune Endpoint security settings with Microsoft Sentinel and watchlists that can be easily customised based on your environment and needs. My main idea is to classify the sensitive configurations in the environment and only creating incidents for those. Of course you could alert on every Intune configuration change but for most of the environments this would lead to many alerts without providing value.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Prerequisites
 &lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Changes to the Intune Endpoint security settings area are visible like other changes within the Intune Audit Logs.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://tech.nicolonsky.ch/content/images/1__S01x0aIYMgr7n9fchKevyg.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;To have the audit events within our Sentinel workspace we need to enable the forwarding for at least &lt;em&gt;AuditLogs&lt;/em&gt;. This can be done within the Intune Tenant Administration &amp;gt; Diagnostic Settings blade.&lt;/p&gt;</description></item><item><title>Migrating to the new Windows Store experience</title><link>https://tech.nicolonsky.ch/migrating-to-the-new-windows-store-experience/</link><pubDate>Mon, 30 Jan 2023 18:56:24 +0000</pubDate><guid>https://tech.nicolonsky.ch/migrating-to-the-new-windows-store-experience/</guid><description>&lt;p&gt;The Microsoft Store for Business will be discontinued mid 2023 and Intune recently introduced the new Windows Store experience backed by winget to distribute apps to your Intune managed endpoints.&lt;/p&gt;
&lt;p&gt;To simplify the migration to the new Windows Store experience I created a PowerShell Script that migrates all currently assigned Windows Store for Business apps to the new Windows Store experience.&lt;/p&gt;
&lt;p&gt;Kudos to &lt;a href="https://www.rozemuller.com/add-microsoft-store-app-with-icon-into-intune-automated/" target="_blank" rel="noreferrer"&gt;Sander Rozemuller&lt;/a&gt; for providing detailed instructions about creating winget apps as PowerShell code samples.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Challenges
 &lt;div id="challenges" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#challenges" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;While scripting and extracting the existing Windows Store for Business (WSfB) apps I encountered the following issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not all apps in WSfB have valid privacy and information URLs, therefore I added a check whether the URL starts with http(s).&lt;/li&gt;
&lt;li&gt;Some apps have characters present (äöüë….) that require UTF-8 encoding. So I explicitly set the HTTP &lt;em&gt;content-type&lt;/em&gt; header to UTF8.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Script prerequisites
 &lt;div id="script-prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#script-prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;To run the script you need to have the Microsoft Graph PowerShell SDK modules installed on your machine. You can install them with the following command:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Install-Module&lt;/span&gt; &lt;span class="n"&gt;Microsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Authentication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Microsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Devices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;CorporateManagement&lt;/span&gt; &lt;span class="n"&gt;-Scope&lt;/span&gt; &lt;span class="n"&gt;CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;From a permissions perspective you need an Azure AD Application Administrator for the initial OAuth permission consent and for regular execution the Intune Administrator role.&lt;/p&gt;</description></item><item><title>Setting up a radius server for Azure AD joined devices and 802.1x</title><link>https://tech.nicolonsky.ch/radius-aad-joined-devices/</link><pubDate>Sun, 25 Sep 2022 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/radius-aad-joined-devices/</guid><description>&lt;p&gt;A common pitfall in environments where Windows server is used for radius authentication is that Microsoft network policy server (NPS) does currently not support device based authentication for Azure AD joined devices. NPS always checks for the existence of a corresponding computer object in AD. For my home setup and lab I wanted to build a radius solution to enable 802.1x authentication on my Wi-Fi network.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Disclaimer
 &lt;div id="disclaimer" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#disclaimer" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This post describes my setup and does not cover prerequisites like certification authority, certificate revocation and client certificate deployment via SCEP. Furthermore you should be familiar with docker, network topics, dns and Intune.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Available solutions
 &lt;div id="available-solutions" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#available-solutions" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Well known commercial Network Access Control (NAC) solutions like CISCO ISE or Aruba Clearpass often ship with an integrated RADIUS server and the possibility to configure wheter LDAP lookups for computer accounts should happen. Important is, that the solution supports certificate revocation checks either via CRLs or OCSP to ensure network access is blocked when a client certificate is revoked.&lt;/p&gt;
&lt;p&gt;For my home and lab setup I wanted to leverage a free or open source solution and decided to use freeRADIUS, probably the most popular open source radius server. freeRADIUS supports EAP-TLS for 802.1x authentication out of the box and is well documented.
Additionally, I was looking for a solution that can be deployed to both locallly in my network (e.g. on a raspberry pi) and also to PaaS offerings like Azure.&lt;/p&gt;</description></item><item><title>Android dedicated devices managed home screen and system apps</title><link>https://tech.nicolonsky.ch/android-kiosk-system-apps/</link><pubDate>Tue, 20 Sep 2022 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/android-kiosk-system-apps/</guid><description>&lt;p&gt;Android enterprise dedicated devices with the Microsoft Managed Homescreen app are a conenient way to provide devices with restricted functionality and customized look and feel to end users. Because the Managed Homescreen app acts as an overlay to the underlying Android certain prompts and features are not enabled by default unless you allow-list them by deploying the corresponding Android System App and add the app to the kiosk device restrictions.&lt;/p&gt;

&lt;h2 class="relative group"&gt;System Apps
 &lt;div id="system-apps" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#system-apps" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;System apps can be added as separate app type within MEM:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2022/08/MEM-Android-System-Apps.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="System Apps"
 src="https://tech.nicolonsky.ch/content/images/2022/08/MEM-Android-System-Apps.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is important to deploy the desired system apps as required to your devices and also adding them within the kiosk configuration:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2022/09/mem-kiosk-apps-android.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Kiosk config"
 src="https://tech.nicolonsky.ch/content/images/2022/09/mem-kiosk-apps-android.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;List of commonly used System apps for Samsung devices
 &lt;div id="list-of-commonly-used-system-apps-for-samsung-devices" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#list-of-commonly-used-system-apps-for-samsung-devices" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Based on a recent project where we had Samsung devices in place we allow-listed the following system apps within the kiosk configuration:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;App Bundle ID&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;USB File Transfer Prompt Android Version &amp;lt; 12&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.samsung.android.MtpApplication&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;USB File Transfer Prompt Android Version &amp;gt;= 12&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.android.mtp&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Android System UI (used for a variety of prompts)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.android.systemui&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Service Mode App (USB prompts)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.sec.android.app.servicemodeapp&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Knox license prompts&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.samsung.android.knox.pushmanager&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Samsung Android update prompts&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.wssyncmldm&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Knox smdms&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.sec.enterprise.knox.cloudmdm.smdms&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Knox container core&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.samsung.android.knox.containercore&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Knox attestation&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.sec.enterprise.knox.attestation&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Keyboard changes&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;com.samsung.android.honeyboard&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;An indicator to decide wheter you need to add an app to the list is always when you can see the prompts outside of the managed homescreen app after leaving the kiosk mode.
{: .notice&amp;ndash;info}&lt;/p&gt;</description></item><item><title>The easiest way to work with the Microsoft Graph PowerShell SDK</title><link>https://tech.nicolonsky.ch/graph-powershell-sdk-kickstart/</link><pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/graph-powershell-sdk-kickstart/</guid><description>&lt;p&gt;When you are new to RESTful APIs and want to start with Microsoft Graph to automate tasks in your Endpoint Manager tenant all the stuff about app registrations, access tokens, pagination and request headers can be quite confusing. In this post I want to show you a quick tip to kickstart your Microsoft Graph API experience.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Requirements
 &lt;div id="requirements" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#requirements" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cloud admin account with Intune Administrator role assigned&lt;/li&gt;
&lt;li&gt;Ability to install Modules from the PowerShell gallery&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;JWT
 &lt;div id="jwt" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#jwt" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Just because you can&amp;rsquo;t see it&amp;hellip; doesn&amp;rsquo;t mean it isn&amp;rsquo;t there: Due to the naturality of OAuth 2.0 and OpenID connect (these are the protocols involved for authorization and authentication in a cloud environment) we can capture short lived access tokens, also called Json Web Tokens (JWTs) directly from a browser. Tokens are usually valid between 50 and 60 minutes - just what we need to get some hands on with Microsoft Graph API and MEM automation.&lt;/p&gt;
&lt;p&gt;The cool thing is actually that we don&amp;rsquo;t need any kind of app registration or additional permissions which can be quite some blocker in certain restricted environments (or staff unfamiliar with those technologies 😉).&lt;/p&gt;</description></item><item><title>Intune app protection policy report</title><link>https://tech.nicolonsky.ch/app-protection-policy-report/</link><pubDate>Mon, 13 Dec 2021 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/app-protection-policy-report/</guid><description>&lt;p&gt;App protection (also called MAM) policies have been around for a couple of years within MEM and I already used them in various projects to protect company data on unmanaged iOS and Android devices. One of the drawbacks with this approach is that we do not have full visibility about the usage and I tried to shed some light about this with a PowerShel reporting script that pulls data from the Microsoft Graph API.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Information visible within the portal
 &lt;div id="information-visible-within-the-portal" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#information-visible-within-the-portal" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the MEM portal we can find report data about the number of users that have checked-in to any MAM policy grouped by the respective app.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2021/12/Intune_MAM_Report_Portal_View.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Intune MAM insights"
 src="https://tech.nicolonsky.ch/content/images/2021/12/Intune_MAM_Report_Portal_View.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If we want to perform a wipe we will also be able to see the devices a user has registered:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2021/12/Intune_MAM_Report_Wipe_Request.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="MAM wipe"
 src="https://tech.nicolonsky.ch/content/images/2021/12/Intune_MAM_Report_Wipe_Request.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Of course I was curious which additional data is available on the Microsoft Graph API and found the following resource storing app protection policy check in details: &lt;code&gt;/users/{ID}/managedAppRegistrations&lt;/code&gt;.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Script
 &lt;div id="script" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#script" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The script uses the &lt;code&gt;Intune PowerShell SDK&lt;/code&gt; (could easily be ported to MSAL.PS because I wrote it already a couple of months ago) to enumerate all internal users within the tenant and will check the above mentioned &lt;code&gt;managedAppRegistrations&lt;/code&gt; resource.
At the end you are presented a flattened CSV report containig the following details:&lt;/p&gt;</description></item><item><title>Dealing with Intune OMA-URI encoding and applocker rules</title><link>https://tech.nicolonsky.ch/intune-oma-uri-encoding/</link><pubDate>Tue, 16 Feb 2021 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/intune-oma-uri-encoding/</guid><description>&lt;p&gt;While fine-tuning and adjusting applocker policies for co-managed Windows 10 clients I got really annoyed by special characters commonly used in the German/Swiss language. The Intune portal seemed to use different encoding and didn&amp;rsquo;t allow me to just copy/paste the currently deployed policy and extend it with a new rule. I needed to request the original file that was uploaded to the tenant in order to adjust the rule. Instead of just accepting this I decided that it is time for an easier approach which I will share with you.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The actual issue
 &lt;div id="the-actual-issue" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-actual-issue" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;After uploading the XML with the applocker policies (in my case EXE rules), special characters like &amp;lsquo;ö&amp;rsquo; or &amp;lsquo;ü&amp;rsquo; have a weird encoding displayed in the portal. The next person that wants to edit the policy needs to take care to fix the unrecognized characters otherwise the publisher rule won&amp;rsquo;t work anymore.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2021/02/Applocker-OMA-URI.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="OMA-URI"
 src="https://tech.nicolonsky.ch/content/images/2021/02/Applocker-OMA-URI.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Top: Portal view of the special characters, bottom: original file.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2021/02/Encoding-Issue.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Encoding issue"
 src="https://tech.nicolonsky.ch/content/images/2021/02/Encoding-Issue.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;Fixing things
 &lt;div id="fixing-things" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fixing-things" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Save file with UTF-8 encoding
 &lt;div id="save-file-with-utf-8-encoding" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#save-file-with-utf-8-encoding" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;First, make sure that you saved an uploaded the file with UTF-8 encoding as this introduces support for most character sets. You can do this by selecting the encoding box in the right bottom of Visual Studio Code:&lt;/p&gt;</description></item><item><title>Android Enterprise Enrollment: Page Not Found</title><link>https://tech.nicolonsky.ch/android-enterprise-enrollment-failure-dem/</link><pubDate>Sat, 19 Dec 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/android-enterprise-enrollment-failure-dem/</guid><description>&lt;p&gt;While doing some Android Enterprise enrollment tests for corporate-owned devices with work profiles I stumbled over the following issue after signing-in with the work account: &amp;ldquo;Page not found&amp;rdquo;.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="fdgdfg"
 src="https://tech.nicolonsky.ch/content/images/2020/12/AE-DEM-Error.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;The solution is fairly simple, just double check that your user does not have the device enrollment manager role assigned, which can be found under the device enrollment pane: &lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="srtg"
 src="https://tech.nicolonsky.ch/content/images/2020/12/AE-DEM.png"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The docs tell us:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If you&amp;rsquo;re enrolling Android Enterprise personally-owned work profile or corporate-owned work profile devices by using a DEM account, there is a limit of 10 devices that can be enrolled per account.
&lt;a href="https://docs.microsoft.com/en-us/mem/intune/enrollment/device-enrollment-manager-enroll" target="_blank" rel="noreferrer"&gt;Microsoft Docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;In my case, I wasn&amp;rsquo;t exceeding that limit because it was the first enrollment with that account so I&amp;rsquo;m not sure if the docs are accurate.&lt;/p&gt;
&lt;p&gt;Updated 21.12.2020:&lt;/p&gt;
&lt;p&gt;&lt;del&gt;I already opened an &lt;a href="https://github.com/MicrosoftDocs/memdocs/issues/1150" target="_blank" rel="noreferrer"&gt;issue on GitHub&lt;/a&gt; about the doc contents.&lt;/del&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@nicolonsky Good question. Using a DEM account isn&amp;rsquo;t available to enroll COPE devices. We fixed the article. The changes should be live later today. Thanks for bringing this to our attention.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Hope this helps.&lt;/p&gt;</description></item><item><title>Housekeeping for stale MEM profiles</title><link>https://tech.nicolonsky.ch/cleanup-mem-profiles/</link><pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/cleanup-mem-profiles/</guid><description>&lt;p&gt;When involved in new projects I often find a bunch of old profiles in the Microsoft Endpoint Management Console.
Before going ahead with a new implementation it&amp;rsquo;s the best time to clean-up all the leftovers from past ramblings.&lt;/p&gt;

&lt;h2 class="relative group"&gt;How to identify stale profiles
 &lt;div id="how-to-identify-stale-profiles" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-to-identify-stale-profiles" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;If one or multiple statements are met for a profile it is very likely to be a stale profile:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No assignments, assignments to a group without members&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Test&amp;rdquo; included within the profile name or description&lt;/li&gt;
&lt;li&gt;Last modified points back in time for more than a year&lt;/li&gt;
&lt;li&gt;No devices reported success/failure status for the given profile type&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;What to do with stale profiles
 &lt;div id="what-to-do-with-stale-profiles" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-to-do-with-stale-profiles" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;So let&amp;rsquo;s be brave and &lt;strong&gt;delete&lt;/strong&gt; them. But Intune doesn&amp;rsquo;t offer any [CTRL] + [Z] or recycle bin possibilities so we might want to have some kind of archive, just in case?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s agree that we:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check the points from the list above&lt;/li&gt;
&lt;li&gt;Ask our colleagues if they know something about the profiles and their usage&lt;/li&gt;
&lt;li&gt;Take a backup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;deleting them afterward is a reasonable action which is probably beneficial for everyone.&lt;/p&gt;</description></item><item><title>Export and import MEM Endpoint Security Profiles</title><link>https://tech.nicolonsky.ch/endpoint-security-profiles/</link><pubDate>Thu, 19 Nov 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/endpoint-security-profiles/</guid><description>&lt;p&gt;Recently I got a DM on Twitter with a question about how to export and import Endpoint Security profiles with Microsoft Graph. Besides a technical answer which might be of interest for you, I&amp;rsquo;d like to show you the workflow I used to give a proper reply.&lt;/p&gt;
&lt;p&gt;Original question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Hi &lt;a href="https://twitter.com/nicolonsky" target="_blank" rel="noreferrer"&gt;@nicolonsky&lt;/a&gt;, I was advised on the MS Elite Partner focus groups team (MEM Automation) to reach out to you regarding my question about export/import policies from Endpoint Security in Intune. I&amp;rsquo;ve been able to export the Disk Encryption policy (via graph explorer), but haven&amp;rsquo;t been able to find the correct format to use to upload/import it. I was hoping that you would be able to advise on how to go about achieving this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;Workflow
 &lt;div id="workflow" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#workflow" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Discover request URL&amp;rsquo;s and payload
 &lt;div id="discover-request-urls-and-payload" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#discover-request-urls-and-payload" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;To discover the request URLs and payloads I used the methodology I explained in the &lt;a href="https://tech.nicolonsky.ch/discover-mem-graph-urls/" &gt;this post&lt;/a&gt; a while ago.
Basically, I tracked the network activity and used a filter to only include requests made to the Graph API while doing the following activities:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2020/11/Examine-Request-Urls-And-Payload.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="examine microsoft graph request urls with your browsers dev tools"
 src="https://tech.nicolonsky.ch/content/images/2020/11/Examine-Request-Urls-And-Payload.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Ensuring regular Defender Quick scans with Microsoft Endpoint Manager proactive remediations</title><link>https://tech.nicolonsky.ch/defender-scan-endpoint-analytics/</link><pubDate>Mon, 28 Sep 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/defender-scan-endpoint-analytics/</guid><description>&lt;p&gt;While looking into the new Microsoft Defender Antivirus report available in MEM (Intune) I discovered some machines which did not report any recent Defender antimalware scans, despite configured via configuration profile. Of course, AV scans are kinda old-fashioned against rapidly evolving threats but a regular quick scan won&amp;rsquo;t hurt anyone. Instead of having a look at every single machine affected, I decided to try out the new proactive remediations feature which went globally available last week and let endpoint analytics do the detection and remediation work for me. As a reference, I used the &lt;a href="https://docs.microsoft.com/en-us/mem/analytics/proactive-remediations" target="_blank" rel="noreferrer"&gt;Tutorial: Proactive remediations&lt;/a&gt; from Microsoft which covers the process quite well.&lt;/p&gt;

&lt;h2 class="relative group"&gt;PowerShell scrips
 &lt;div id="powershell-scrips" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#powershell-scrips" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;For Endpoint analytics / Proactive remediations we need two PowerShell scripts. The first script is used as a detection script and determines whether remediation is necessary based on the exit code. Exit code &lt;code&gt;0&lt;/code&gt; indicates a healthy status and exit code &lt;code&gt;1&lt;/code&gt; indicates remediation necessary. Remediation occurs with a second PowerShell script.&lt;/p&gt;
&lt;p&gt;To detect the most recent Defender scan I used the Windows Eventlog. Event ID&amp;rsquo;s are documented &lt;a href="https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-antivirus/troubleshoot-microsoft-defender-antivirus#to-view-a-microsoft-defender-antivirus-event" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Detection script
 &lt;div id="detection-script" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#detection-script" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;script src="https://gist.github.com/nicolonsky/ac80d1cc89c9b42c2ed8099592e5c2bc.js"&gt;&lt;/script&gt;

&lt;h3 class="relative group"&gt;Remediation script
 &lt;div id="remediation-script" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#remediation-script" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The remediation script is just about a one-liner to trigger a quick scan. You can extend this based on your requirements and respective to your Intune settings. E.g. triggering a signature update for a scan or adding additional steps.&lt;/p&gt;</description></item><item><title>Discover the Microsoft Graph API with the Microsoft Endpoint Manager Portal</title><link>https://tech.nicolonsky.ch/discover-mem-graph-urls/</link><pubDate>Tue, 08 Sep 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/discover-mem-graph-urls/</guid><description>&lt;p&gt;You always wanted to automate a specific action within Intune / the Microsoft Endpoint Manager Portal (MEM) but were afraid of the complexity? The Microsoft Graph API docs deliver you more questions instead of answers? Automating tasks within the MEM portal could be very easy, couldn&amp;rsquo;t it? I promise it will be much simpler with this magician trick.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Microsoft Endpoint Manager Portal
 &lt;div id="microsoft-endpoint-manager-portal" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#microsoft-endpoint-manager-portal" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The MEM Portal UI relies on the Microsoft Graph API. This means that the UI where you create new settings and policies and the Intune backend are encapsulated with different layers. Communication between the UI and the backend happens with the Microsoft Graph API. With the developer tools we can trace network traffic and discover the request URLs and request body payload which are required to interact with the API.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Architecture"
 src="https://tech.nicolonsky.ch/content/images/2020/09/MEM-Portal-Automation.svg"
 &gt;&lt;/figure&gt;
{: .align-center}&lt;/p&gt;

&lt;h2 class="relative group"&gt;Example about how to capture URLs and build a PowerShell script
 &lt;div id="example-about-how-to-capture-urls-and-build-a-powershell-script" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#example-about-how-to-capture-urls-and-build-a-powershell-script" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/k6ZCSJVXaOI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;

&lt;p&gt;Original request body:&lt;/p&gt;</description></item><item><title>Bulk create Intune mobile app deployment groups and assignments</title><link>https://tech.nicolonsky.ch/intune-mobile-app-assignment-bulk/</link><pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/intune-mobile-app-assignment-bulk/</guid><description>&lt;p&gt;Creating assignments and software deployment groups for Intune mobile apps is quite a repetitive and manual task. Because of that, I want to share a PowerShell script with you which allows you to automatically create software deployment groups in Azure AD and the assignments for various intents.&lt;/p&gt;
&lt;p&gt;The script allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create Azure AD groups (install uninstall purpose)
&lt;ul&gt;
&lt;li&gt;Pick existing groups based on displayName&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Assign Intune mobile apps (tested for Win32 and MSI LOB apps)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2020/08/intune-mobile-app-assignment-bulk.gif" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Script in Action"
 src="https://tech.nicolonsky.ch/content/images/2020/08/intune-mobile-app-assignment-bulk.gif"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nicolonsky/Techblog/tree/master/IntuneMobileAppAssignment" target="_blank" rel="noreferrer"&gt;You can find the script on my techblog GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Because of the &lt;a href="https://github.com/nicolonsky/Techblog/blob/master/IntuneMobileAppAssignment/New-IntuneAppAssignment.ps1#L220" target="_blank" rel="noreferrer"&gt;configurable group prefixes&lt;/a&gt; the script helps you to keep your Intune environment clean and implement a standard app assignment configuration.&lt;/p&gt;
&lt;p&gt;The script uses the Microsoft Graph API and the following resources&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://graph.microsoft.com/beta/deviceAppmanagement/mobileApps&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://graph.microsoft.com/beta/deviceAppmanagement/mobileApps/{AppID}/Assignments&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://graph.microsoft.com/beta/groups&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It uses the preregistered app &amp;ldquo;Microsoft Intune PowerShell&amp;rdquo; which exists by default in all tenants. If you want to run the Script with PowerShell 7 you need to create an adjust the MSAL token section with the &lt;code&gt;-DeviceCode&lt;/code&gt; parameter.&lt;/p&gt;
&lt;p&gt;You can bulk select the apps you want to create the assignment and AAD deployment groups:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tech.nicolonsky.ch/content/images/2020/08/intune-mobile-app-assignment-bulk-select.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="App assignment"
 src="https://tech.nicolonsky.ch/content/images/2020/08/intune-mobile-app-assignment-bulk-select.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hope this saves you some time.&lt;/p&gt;</description></item><item><title>Intune scope tags and role-based access control explained</title><link>https://tech.nicolonsky.ch/intune-scope-tags-rbac-explained/</link><pubDate>Mon, 03 Aug 2020 00:00:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/intune-scope-tags-rbac-explained/</guid><description>&lt;p&gt;For larger Intune environments a solid role-based access implementation becomes crucial to ensure a secure administration. But how does Intune role-based access control (RBAC) work in combination with scope tags and how to get started? This post gets you covered with explanations and practical examples.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Role-based access control within the Microsoft 365 ecosystem
 &lt;div id="role-based-access-control-within-the-microsoft-365-ecosystem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#role-based-access-control-within-the-microsoft-365-ecosystem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Within the Microsoft 365 ecosystem, Microsoft provides Azure AD administrative roles to administrate services like Exchange (Exchange administrator), SharePoint (SharePoint administrator), Intune (Intune administrator) and so on.&lt;/p&gt;
&lt;p&gt;As you can see Azure AD provides (usually) only one role which grants full administrative access over a service. You can configure more fine-grained controls within the service itself - that&amp;rsquo;s where the RBAC controls of the respective service kick in.&lt;/p&gt;
&lt;p&gt;To give you another example: You might have a 1&lt;sup&gt;st&lt;/sup&gt; or 2&lt;sup&gt;nd&lt;/sup&gt; level support department which needs permissions to perform remote actions on Intune managed devices. Instead of assigning them the Azure AD Intune Administrator role, it&amp;rsquo;s more convenient to assign them a fine-grained Intune RBAC role which delegates exactly the permissions needed.&lt;/p&gt;
&lt;p&gt;As the name already indicates Intune related roles only live within the Intune tenant and cannot be managed from AAD and vice-versa:&lt;/p&gt;</description></item><item><title>Managing the new Microsoft Edge Browser with Intune</title><link>https://tech.nicolonsky.ch/managing-the-new-microsoft-edge-browser-with-intune/</link><pubDate>Mon, 03 Feb 2020 15:40:58 +0000</pubDate><guid>https://tech.nicolonsky.ch/managing-the-new-microsoft-edge-browser-with-intune/</guid><description>&lt;p&gt;With the availability of the new Edge browser based on chromium I gained the first experiences about configuring the browser in an enterprise environment. Of course I want to share those with you. This post hopefully helps you to roll-out and configure the new Edge Browser with Microsoft Intune.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Install the new Edge Chromium with Intune
 &lt;div id="install-the-new-edge-chromium-with-intune" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#install-the-new-edge-chromium-with-intune" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The installation of Edge is not the main topic of this post. The Edge browser is available in Intune as built-in app type like the Office 365 suite. More information about the installation process is available &lt;a href="https://docs.microsoft.com/en-us/intune/apps/apps-windows-edge" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;figure class="kg-card kg-image-card"&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2020/02/image-8.png" class="kg-image"&gt;&lt;/figure&gt;

&lt;h3 class="relative group"&gt;Set Edge Chromium as default browser
 &lt;div id="set-edge-chromium-as-default-browser" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#set-edge-chromium-as-default-browser" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Default applications are configured on the Windows 10 operating system level via app associations. The current app associations of a device can be exported with dism and the command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Dism /Online /Export-DefaultAppAssociations:&amp;quot;appassociations.xml&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Which will produce a file containing all associations. For setting Edge as the default browser this one is sufficient:&lt;/p&gt;
&lt;script src="https://gist.github.com/nicolonsky/57527e0344d26aa7a41920f9fbb5cdda.js"&gt;&lt;/script&gt;
&lt;p&gt;To deploy an app associations file with Intune it needs to be base64 encoded. I used the &lt;a href="https://www.base64encode.org" target="_blank" rel="noreferrer"&gt;base64encode online tool&lt;/a&gt;.&lt;/p&gt;
&lt;script src="https://gist.github.com/nicolonsky/9b362a520a98d5cba2871fd1a43a10ba.js"&gt;&lt;/script&gt;

&lt;h4 class="relative group"&gt;Intune configuration
 &lt;div id="intune-configuration" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#intune-configuration" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;To distribute the default app association configure the following OMA-URI in a custom device configuration profile:&lt;/p&gt;</description></item><item><title>Prevent Intune devices from getting the Microsoft search (Bing) plugin</title><link>https://tech.nicolonsky.ch/prevent-intune-devices-from-getting-the-microsoft-search-bing-plugin/</link><pubDate>Fri, 24 Jan 2020 11:19:24 +0000</pubDate><guid>https://tech.nicolonsky.ch/prevent-intune-devices-from-getting-the-microsoft-search-bing-plugin/</guid><description>&lt;p&gt;Microsoft recently announced to install a Bing extension on new and existing Office 365 ProPlus installations which will set Bing as the default search engine starting with the first Office 365 ProPlus release in 2020 - not appreciated Microsoft and definitely not what customers want! The extension will be shipped for new Office installations and existing clients with Office 365 ProPlus installed when they update.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 11.02.2020: &amp;ldquo;&lt;/strong&gt; The Microsoft Search in Bing browser extension will not be automatically deployed with Office 365 ProPlus.&amp;rdquo; - I will keep this post for the archives.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Starting with Version 2002 of Office 365 ProPlus, an extension for Microsoft Search in Bing will be installed that makes Bing the default search engine for the Google Chrome web browser only on devices in certain &lt;a href="https://docs.microsoft.com/en-us/deployoffice/microsoft-search-bing#which-locations-will-receive-microsoft-search-in-bing-with-office-365-proplus" target="_blank" rel="noreferrer"&gt;locations&lt;/a&gt;. This extension will be installed with new installations of Office 365 ProPlus or when existing installations of Office 365 ProPlus are updated. (&lt;a href="https://docs.microsoft.com/en-us/deployoffice/microsoft-search-bing" target="_blank" rel="noreferrer"&gt;Reference&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;As expected date the 2002 release will be rolling out in March for the monthly update channel.&lt;/p&gt;
&lt;p&gt;More details are available under:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/deployoffice/microsoft-search-bing" target="_blank" rel="noreferrer"&gt;Microsoft Search in Bing and Office 365 ProPlus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/deployoffice/microsoft-search-bing#which-locations-will-receive-microsoft-search-in-bing-with-office-365-proplus" target="_blank" rel="noreferrer"&gt;Affected locations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;New Office installations
 &lt;div id="new-office-installations" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#new-office-installations" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;To avoid the plugin being installed with new office installations edit your Office 365 Configuration with the &lt;a href="https://config.office.com/officeSettings/configurations" target="_blank" rel="noreferrer"&gt;Office Customization Tool&lt;/a&gt; . Make sure to toggle the switch for &amp;ldquo;Set default search engine to Microsoft Search in Bing&amp;rdquo; to off:&lt;/p&gt;</description></item><item><title>Deploy fonts to Intune managed Windows 10 devices</title><link>https://tech.nicolonsky.ch/deploy-fonts-with-intune/</link><pubDate>Sun, 19 Jan 2020 16:25:21 +0000</pubDate><guid>https://tech.nicolonsky.ch/deploy-fonts-with-intune/</guid><description>&lt;p&gt;Recently a customer using Microsoft Intune requested to deploy a TrueType font required by one of their line of business apps. Because Intune does not offer a native solution to deploy fonts it was quite clear that a PowerShell script or Intune Win32 app should do the trick. Note that the mentioned PowerShell scripts can also be used for app deployments with Configuration Manager (MEMCM).&lt;/p&gt;

&lt;h3 class="relative group"&gt;How to install a font programmatically?
 &lt;div id="how-to-install-a-font-programmatically" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-to-install-a-font-programmatically" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;There seem to be &lt;a href="https://eddiejackson.net/wp/?p=16137" target="_blank" rel="noreferrer"&gt;multiple options&lt;/a&gt; depending on the operating system version. I&amp;rsquo;ve tested this with Windows 10 1909. And broke it down to the following steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy the font to the &amp;ldquo;C:\Windows\Fonts&amp;rdquo; folder&lt;/li&gt;
&lt;li&gt;Create a registry key which points to the filename of the *.ttf or *.otf font copied to the Windows font path&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;How to install a font with Intune?
 &lt;div id="how-to-install-a-font-with-intune" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-to-install-a-font-with-intune" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;To get the font to Windows 10 devices I created a PowerShell script which copies the font files to the windows-fonts folder and creates the required registry key.&lt;/p&gt;
&lt;p&gt;Deploying the PowerShell script as Intune Win32 app has the advantage that we can link the font as a dependency if any app requires a specific font. Additionally we can detect and uninstall the font if needed.&lt;/p&gt;</description></item><item><title>Monitor Apple token expiration in Intune</title><link>https://tech.nicolonsky.ch/monitor-apple-token-expiration-in-intune/</link><pubDate>Sat, 04 Jan 2020 14:55:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/monitor-apple-token-expiration-in-intune/</guid><description>&lt;p&gt;Apple tokens for Mobile Device Management like APNS certificates, DEP and VPP tokens need a renewal every 365 days. When an APNS certificate has expired you are forced to re-enroll all of your MDM managed apple devices. To avoid any headaches I put together a few lines of PowerShell which monitor the expiration with Azure automation and send a notification to Microsoft teams or email.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Script
 &lt;div id="script" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#script" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The script is intended to run recurring on Azure automation. And I recommend to setup a schedule which runs the script once a week. The script checks the following apple tokens and triggers the teams notification if it expires in less than the configured number of days:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Push Notification certificate&lt;/li&gt;
&lt;li&gt;DEP (Device Enrollment Program) tokens&lt;/li&gt;
&lt;li&gt;VPP (Volume Purchase Program) tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Hint&lt;/strong&gt; : You can setup multiple DEP and VPP tokens in your Intune tenant.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2019/12/MessageCard-17.png"&gt;&lt;figcaption&gt;The triggered notification is delivered to Microsoft Teams as message card with some details about the token&lt;/figcaption&gt;&lt;/figure&gt;

&lt;h3 class="relative group"&gt;Prerequisites
 &lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In order to get the monitoring up and running you need at least:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Azure automation account (ideally with a service principal), &lt;a href="https://docs.microsoft.com/en-us/azure/automation/automation-quickstart-create-account" target="_blank" rel="noreferrer"&gt;if you need a guide to set up an automation account read follow this article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An incoming webhook for your Microsoft Teams team which will receive the notifications OR an email account to send mails&lt;/li&gt;
&lt;li&gt;The script from my &lt;a href="https://github.com/nicolonsky/Techblog/tree/master/IntuneMonitorAppleTokens" target="_blank" rel="noreferrer"&gt;Github techblog repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Create a Microsoft Teams Webhook
 &lt;div id="create-a-microsoft-teams-webhook" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#create-a-microsoft-teams-webhook" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Navigate to your desired teams channel which should receive the notifications and add a new incoming webhook:&lt;/p&gt;</description></item><item><title>Have you already started with Intune automation and Microsoft Graph?</title><link>https://tech.nicolonsky.ch/getting-started-with-workplace-automation/</link><pubDate>Thu, 19 Dec 2019 21:16:47 +0000</pubDate><guid>https://tech.nicolonsky.ch/getting-started-with-workplace-automation/</guid><description>&lt;p&gt;This post has the intention to give you an overview and starting point to automate things with the Microsoft Graph API and PowerShell. While having the focus on Intune and EM+S but the basics are also valid for other Microsoft services.&lt;/p&gt;

&lt;h3 class="relative group"&gt;The world is changing and so are you?
 &lt;div id="the-world-is-changing-and-so-are-you" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-world-is-changing-and-so-are-you" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;When talking about automation most people only think about some PowerShell code and scheduled tasks running on whatever box in an environment. But technology regarding Microsoft services and it&amp;rsquo;s automation possibilities have definitely evolved quickly. Automation can now be done with basically any scripting or programming language because Microsoft offers us the Microsoft Graph API. Although API (application program interface) sounds more like a developer term engineers should better get used to consuming API&amp;rsquo;s. As more and more services can be consumed as SaaS API&amp;rsquo;s are mostly offered for further data processing and automation.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Microsoft Graph API
 &lt;div id="microsoft-graph-api" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#microsoft-graph-api" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Microsoft describes it&amp;rsquo;s own Graph API as &amp;ldquo;Microsoft Graph is the gateway to data and intelligence in Microsoft 365&amp;rdquo;. Most of the API&amp;rsquo;s out there are built according the RESTful definition. A RESTful, also called REST API should implement the following operations (HTTP methods) to work with data:&lt;/p&gt;</description></item><item><title>Application based authentication with the Intune PowerShell SDK using a certificate</title><link>https://tech.nicolonsky.ch/azure-ad-application-based-authentication-with-intune-using-certificate/</link><pubDate>Tue, 10 Dec 2019 15:43:58 +0000</pubDate><guid>https://tech.nicolonsky.ch/azure-ad-application-based-authentication-with-intune-using-certificate/</guid><description>&lt;p&gt;As you might have noticed I have been doing quite a lot of automation stuff with Microsoft Graph for Intune and Azure AD. My preferred way to run PowerShell scripts which need to run on a regular basis is to use Azure automation. Unfortunately the official &amp;ldquo;Intune-PowerShell-SDK&amp;rdquo; does not support authentication with a client certificate. Therefore I updated the module and will show you how to use it with Azure automation.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Why I don&amp;rsquo;t like client secrets
 &lt;div id="why-i-dont-like-client-secrets" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-i-dont-like-client-secrets" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Azure automation brings us service principals (run as accounts) which simplify the access to Azure resources by providing an Azure AD app registration and certificates to authenticate against Azure AD. This provides more security and prevents the risk from having client secrets stored as plain text in scripts. Going with a client secret when having a nice certificate based authentication solution in place feels like making a step-backwards for me. This was the main reason why I decided to &amp;ldquo;upgrade&amp;rdquo; the Intune-PowerShell-SDK to support certificate based authentication.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Why I love the Intune-PowerShell-SDK
 &lt;div id="why-i-love-the-intune-powershell-sdk" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-i-love-the-intune-powershell-sdk" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;This PowerShell SDK provides nice Cmdlets to do any kind of automation with Microsoft Graph, not only limited to Intune because it offers a helper cmdlets like:&lt;/p&gt;</description></item><item><title>Bulk update Windows Autopilot groupTags</title><link>https://tech.nicolonsky.ch/bulk-update-windows-autopilot/</link><pubDate>Sun, 01 Dec 2019 11:21:58 +0000</pubDate><guid>https://tech.nicolonsky.ch/bulk-update-windows-autopilot/</guid><description>&lt;p&gt;Recently I needed to change a couple of groupTags on existing Windows Autopilot devices. Because Windows Autopilot profiles have been assigned based on the groupTag. Of course I could have done this with the portal (check out the &lt;a href="https://devicemanagement.microsoft.com" target="_blank" rel="noreferrer"&gt;devicemanagement.microsoft.com&lt;/a&gt; portal if not done yet!) but I am definitely an automation fan when I need to do repetitive work.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Portal view and property mapping
 &lt;div id="portal-view-and-property-mapping" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#portal-view-and-property-mapping" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In the Intune portal the Group Tag field on an Autopilot device maps to the Azure AD device property &amp;ldquo;OrderID&amp;rdquo;.&lt;br&gt;
Dynamic Azure AD Groups to assign Autopilot profiles to devices can be built with the following membership rule:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(device.devicePhysicalIds -any _ -eq &amp;quot;[OrderID]:mOSD&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;img src="https://tech.nicolonsky.ch/content/images/2019/11/image.png" alt="Windows Autopilot Device"&gt;
&lt;p&gt;The &amp;ldquo;Order Identifier&amp;rdquo; field on an Autopilot device maps to the Azure AD device property &amp;ldquo;PurchaseOrderId&amp;rdquo;.&lt;br&gt;
Dynamic Azure AD Groups to assign Autopilot profiles to devices can be built with the following membership rule:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(device.devicePhysicalIds -any _ -eq &amp;quot;[PurchaseOrderId]:1234&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 class="relative group"&gt;PowerShell script to update groupTags
 &lt;div id="powershell-script-to-update-grouptags" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#powershell-script-to-update-grouptags" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The following script updates the groupTag of one or multiple selected Autopilot devices. Selection is done with a PowerShell GridView.&lt;/p&gt;
&lt;p&gt;Please note:&lt;/p&gt;</description></item><item><title>Intune export uploaded PowerShell scripts</title><link>https://tech.nicolonsky.ch/view-and-export-uploaded-intune-powershell-scripts/</link><pubDate>Wed, 09 Oct 2019 16:36:57 +0000</pubDate><guid>https://tech.nicolonsky.ch/view-and-export-uploaded-intune-powershell-scripts/</guid><description>&lt;p&gt;After you have uploaded a PowerShell script to the Intune portal you won&amp;rsquo;t be able to view the script or its content. Therefore things become complicated when an Intune tenant is managed by multiple admins and someone wants to update or review a script. In addition to the unknown script content things can go from bad to worse if you can&amp;rsquo;t find the script anymore. Fortunately we can recollect our PowerShell scripts directly from the Microsoft Graph API.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Taking advantage of the Intune-PowerShell-SDK
 &lt;div id="taking-advantage-of-the-intune-powershell-sdk" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#taking-advantage-of-the-intune-powershell-sdk" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/Intune-PowerShell-SDK#one-time-setup-powershell-gallery" target="_blank" rel="noreferrer"&gt;Install the Intune-PowerShell-SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/Intune-PowerShell-SDK#before-this-module-is-used-in-your-organization" target="_blank" rel="noreferrer"&gt;Consent MS Graph App registration&lt;/a&gt; if not done yet (uses default Microsoft Intune PowerShell App with ID: d1ddf0e4-d672-4dae-b554-9d5bdfd93547 )&lt;/li&gt;
&lt;li&gt;Execute the snippet below&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 class="relative group"&gt;Retrieve device configuration - PowerShell scripts
 &lt;div id="retrieve-device-configuration---powershell-scripts" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#retrieve-device-configuration---powershell-scripts" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;!--kg-card-begin: markdown--&gt;&lt;script src="https://gist.github.com/nicolonsky/80c4d36d29999a15dd79ddb271ebd48f.js"&gt;&lt;/script&gt;&lt;!--kg-card-end: markdown--&gt;

&lt;h2 class="relative group"&gt;Final words
 &lt;div id="final-words" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#final-words" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This was more a minimalistic self-serving post instead of a good explained one but it hopefully helps you if in need to export your PowerShell scripts in Intune without reinventing the wheel.&lt;/p&gt;</description></item><item><title>Windows Autopilot failed to delete device records</title><link>https://tech.nicolonsky.ch/windows-autopilot-failed-to-delete-device-records/</link><pubDate>Sun, 29 Sep 2019 20:16:03 +0000</pubDate><guid>https://tech.nicolonsky.ch/windows-autopilot-failed-to-delete-device-records/</guid><description>&lt;p&gt;Recently I needed to delete a desktop machine from the Windows Autopilot service in order to use the machine in another tenant.  But the problem was that the Intune and Azure AD device objects were already deleted. All attempts taken within the Microsoft 365 Device Management and Intune Portal were unsuccessful.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Issue
 &lt;div id="issue" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#issue" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Usually the autopilot device shows the associated Azure AD and Intune objects but here they were shown as N/A (not available) because they were already deleted.&lt;/p&gt;
&lt;img src="https://tech.nicolonsky.ch/content/images/2019/09/Stale-Autopilot-Device.png"&gt;
&lt;p&gt;Every attempt to delete the device produced the following error:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Device 8CC9082ZVE deletion failed. Please delete the associated Intune device before deleting this Autopilot device record.&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2019/09/Intune_AutoPilot_Device_Deletion_Failure---Copy.png"&gt;

&lt;h2 class="relative group"&gt;Solution
 &lt;div id="solution" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#solution" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;A quick visit to the Microsoft Store for Business resolved things because there I could delete the device without any issue. &lt;a href="https://businessstore.microsoft.com/" target="_blank" rel="noreferrer"&gt;Direct URL to the Microsoft Store for Business.&lt;/a&gt; After a sync in the Intune Autopilot Devices pane the device had also gone from the Intune portal.&lt;/p&gt;
&lt;img src="https://tech.nicolonsky.ch/content/images/2019/09/Autopilot-Microsoft-Store-for-business-1.png"&gt;

&lt;h2 class="relative group"&gt;Final words
 &lt;div id="final-words" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#final-words" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This was a rather short post but I hope it prevents headache if you want to delete an Autopilot device with stale Azure AD / Intune records.&lt;/p&gt;</description></item><item><title>Windows Autopilot White Glove Field Notes</title><link>https://tech.nicolonsky.ch/windows-autopilot-white-glove-field-notes/</link><pubDate>Wed, 14 Aug 2019 16:38:31 +0000</pubDate><guid>https://tech.nicolonsky.ch/windows-autopilot-white-glove-field-notes/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to share some field notes and experiences with the Windows Autopilot White Glove feature which is available with the Windows 10 1903 release. I&amp;rsquo;ve done a lot of testing and engineering for a recent project which also included this brand new feature.&lt;/p&gt;

&lt;h2 class="relative group"&gt;First things first (requirements)
 &lt;div id="first-things-first-requirements" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#first-things-first-requirements" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This is probably the most important information of this post. Really make sure to verify the following prerequisites for Autopilot White Glove. Because there are additional requirements compared to Autopilot enrollments.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Basic Autopilot
 &lt;div id="basic-autopilot" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#basic-autopilot" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Make sure that a &amp;ldquo;classical&amp;rdquo; Autopilot Deployment is working properly without any issues.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Hardware and OS
 &lt;div id="hardware-and-os" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hardware-and-os" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Hardware with support for device Attestation (&amp;ldquo;Physical devices that support TPM 2.0 and device attestation; virtual machines are not supported.&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Physical devices with Ethernet connectivity (WiFi connectivity is not supported!)&lt;/li&gt;
&lt;li&gt;Windows 10, version 1903 with &lt;a href="https://support.microsoft.com/help/4505903" target="_blank" rel="noreferrer"&gt;KB4505903&lt;/a&gt; injected (equals OS Build 18362.267)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Starting the white glove adventure
 &lt;div id="starting-the-white-glove-adventure" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#starting-the-white-glove-adventure" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Preparing Windows 10 1903
 &lt;div id="preparing-windows-10-1903" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#preparing-windows-10-1903" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;As mentioned by Michael Niehaus Windows multiple Autopilot issues were fixed by &lt;a href="https://support.microsoft.com/help/4505903" target="_blank" rel="noreferrer"&gt;KB4505903&lt;/a&gt;. So we need to inject this cumulative update to the downloaded source. This was already the first hurdle to overcome because &lt;em&gt;I&amp;rsquo;ve missed the fact that the Windows Setup (install.wim) actually contained multiple image indexes (yeah it&amp;rsquo;s kinda embarrassing)&lt;/em&gt;. We achieve this by using dism offline servicing with &lt;strong&gt;PowerShell&lt;/strong&gt; cmdlets.&lt;/p&gt;</description></item><item><title>Windows Autopilot White Glove Error 0x81036501</title><link>https://tech.nicolonsky.ch/windows-autopilot-white-glove-error-0x81036501/</link><pubDate>Thu, 08 Aug 2019 16:58:05 +0000</pubDate><guid>https://tech.nicolonsky.ch/windows-autopilot-white-glove-error-0x81036501/</guid><description>&lt;p&gt;While testing Autopilot White glove for a customer project my test machines always got stuck within the &amp;ldquo;Registering your device for mobile management&amp;rdquo; step and timed out after 12 minutes and returned the error &amp;ldquo;0x81036501&amp;rdquo; just before showing the White Glove Failed screen. I was doing my tests with Windows 10 1903 DE (German) with the most recent cumulative update installed, meaning OS build: 18362.267.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The Issue
 &lt;div id="the-issue" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-issue" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;As normal Autopilot enrollments were working like a charm this one had to be related to the White Glove scenario. Here&amp;rsquo;s a screen capture showing the actual behavior (unfortunately with German display language):&lt;/p&gt;
&lt;figure class="kg-card kg-image-card"&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2019/08/AutoPilotWhiteGlove-1.gif" class="kg-image"&gt;&lt;/figure&gt;
&lt;p&gt;By pressing [shift] + [F10] i opened a command prompt and launched the event viewer (eventvwr.msc). In the &amp;ldquo;&lt;em&gt;Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Autopilot&lt;/em&gt;&amp;rdquo; event log I found the following error popping up multiple times, including a retry attempt and limit:&lt;/p&gt;
&lt;!--kg-card-begin: markdown--&gt;
&lt;p&gt;&lt;code&gt;Autopilot discovery failed to find a valid MDM. Confirm that the AAD tenant is properly provisioned and licensed for exactly one MDM. HRESULT = 0x81036501&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AutopilotManager failed during device enrollment phase DeviceDiscovery. HRESULT = 0x81036501&lt;/code&gt;&lt;/p&gt;
&lt;!--kg-card-end: markdown--&gt;
&lt;p&gt;On the enrollment status page the error &amp;ldquo;0x81036501&amp;rdquo; got displayed for like one second before showing the red generic Autopilot White glove error screen.&lt;/p&gt;</description></item><item><title>Intune Win32 app requirements deep dive</title><link>https://tech.nicolonsky.ch/intune-win32-app-requirements-deep-dive/</link><pubDate>Mon, 05 Aug 2019 17:09:02 +0000</pubDate><guid>https://tech.nicolonsky.ch/intune-win32-app-requirements-deep-dive/</guid><description>&lt;p&gt;The Intune Win32 app requirements feature is quite underrated and often overseen in my experience. The ability to specify a custom PowerShell scripts allow us to check for specific hardware or device properties in order to determine if an app or firmware update should be installed or not. So there&amp;rsquo;s no need to build multiple and complex dynamic Azure AD groups for the assignment of your apps.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Use cases from the field
 &lt;div id="use-cases-from-the-field" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#use-cases-from-the-field" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;From recent projects I&amp;rsquo;ve discovered the following use cases to deploy Win32 apps only to specific hardware types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install specific device drivers or hardware vendor&amp;rsquo;s software which is not available within the Windows update catalog  (e.g. hotkey features, firmware updates)&lt;/li&gt;
&lt;li&gt;Install a VPN client only on notebooks and tablets (e.g. Palo Alto GlobalProtect Client)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Win32 app requirements
 &lt;div id="win32-app-requirements" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#win32-app-requirements" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Intune Win32 app requirements are evaluated by the Intune Management Extension to check if a device fulfills defined requirements for an application installation. Requirements support both built-in and custom rules.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Built-in rules
 &lt;div id="built-in-rules" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#built-in-rules" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Wit the built-in capabilities we can check for:&lt;/p&gt;</description></item><item><title>5 Ways to Screw up your Intune Tenant</title><link>https://tech.nicolonsky.ch/5-ways-to-screw-up-your-intune-tenant/</link><pubDate>Wed, 31 Jul 2019 06:40:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/5-ways-to-screw-up-your-intune-tenant/</guid><description>&lt;p&gt;Here are 5 common recommendations based on misconfigurations I&amp;rsquo;ve came across in the field which will give your Intune tenant and devices a hard time to work smoothly. So better read this post that you not screw up your Intune tenant and maybe take advantage of the experiences others already gained.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Housekeeping
 &lt;div id="housekeeping" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#housekeeping" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s important to know which devices are actually being used and usually a nice addition to understand compliance data. Stale device entries in may give you a wrong impression of your Intune tenant and it&amp;rsquo;s health. So enable the automatic device cleanup rule to remove the enrolled device from Intune. Additionally you may also remove the device entries stored in Azure Active Directory (&lt;a href="https://tech.nicolonsky.ch/clean-up-azure-ad-devices/" target="_blank" rel="noreferrer"&gt;I created a little on-demand script for this which can also run in azure automation&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Same applies to registered Autopilot devices. E.g. if you allow your employees to buy their old devices from the company if they get a new one make sure to remove the device from the Autopilot service. Otherwise you&amp;rsquo;ll see it again popping up in your tenant very soon. Thus it also prevents the device from being registered in another tenant as autopilot device.&lt;/p&gt;</description></item><item><title>Automating network drive mapping configuration with Intune</title><link>https://tech.nicolonsky.ch/next-level-network-drive-mapping-with-intune/</link><pubDate>Fri, 19 Jul 2019 07:32:46 +0000</pubDate><guid>https://tech.nicolonsky.ch/next-level-network-drive-mapping-with-intune/</guid><description>&lt;p&gt;I&amp;rsquo;m thrilled to introduce the &lt;a href="https://intunedrivemapping.azurewebsites.net/DriveMapping" target="_blank" rel="noreferrer"&gt;intune-drive-mapping-generator&lt;/a&gt; which creates PowerShell scripts to map network drives with Intune. The tool is open source and built on ASP.NET Core MVC.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://intunedrivemapping.azurewebsites.net/DriveMapping" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="intune-drivemapping-generator"
 src="https://tech.nicolonsky.ch/content/images/2019/07/intune-drivemapping-generator.png"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The intune-drive-mapping-generator is your tool of choice to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generate an Intune PowerShell script to map network drives on Azure AD joined devices&lt;/li&gt;
&lt;li&gt;Seamlessly migrate existing network drive mapping group policies&lt;/li&gt;
&lt;li&gt;Generate a network drive mapping configuration from scratch&lt;/li&gt;
&lt;li&gt;Use an existing Active Directory group as a filter to deploy all your drive mapping configurations within one script&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This all happens without scripting effort. You receive a fully functional PowerShell script for the deployment with Intune.&lt;/em&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;Architecture
 &lt;div id="architecture" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#architecture" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This tool is designed to work best with the following components although it can be useful for other purposes(?) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Azure AD Joined and Intune enrolled Windows 10 devices&lt;/li&gt;
&lt;li&gt;Synced user account from Active Directory to Azure Active Directory (Azure AD Connect)&lt;/li&gt;
&lt;li&gt;On-premises file servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Howto
 &lt;div id="howto" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#howto" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Export existing group policy
 &lt;div id="export-existing-group-policy" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#export-existing-group-policy" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;To convert your existing drive mapping group policy configuration, save the GPO as XML report with the group policy management console.&lt;/p&gt;</description></item><item><title>Creating desktop shortcuts with Intune</title><link>https://tech.nicolonsky.ch/intune-create-desktop-shortcut/</link><pubDate>Tue, 09 Jul 2019 23:22:24 +0000</pubDate><guid>https://tech.nicolonsky.ch/intune-create-desktop-shortcut/</guid><description>&lt;p&gt;Why want you to create desktop shortcuts with Intune? Business specific apps may require special shortcuts in order to launch the application with the right parameters. Or you need to create a shortcut for an application which is stored on your on premises fileserver. For this purpose I created a little solution which closes the gap between the modern cloud and on premises world. In comparison with other solutions this one works if you have redirected the users desktop with OneDrive Known Folder Move and automatically remediates missing shortcuts if they got deleted.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nicolonsky/Techblog/tree/master/IntuneShortcut" target="_blank" rel="noreferrer"&gt;Direct link to the GitHub repository.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Browser links:&lt;/strong&gt; Instead of placing shortcuts to websites on the desktop I would recommend you to use managed bookmarks which can be directly provisioned within the web browser. I documented this for the new Microsoft Edge based on chromium &lt;a href="https://tech.nicolonsky.ch/managing-the-new-microsoft-edge-browser-with-intune/#provision-managed-favorites" &gt;here&lt;/a&gt;.
{: .notice}&lt;/p&gt;

&lt;h2 class="relative group"&gt;Features
 &lt;div id="features" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#features" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This solution works when the desktop is redirected with OneDrive Known Folder Move&lt;/li&gt;
&lt;li&gt;Everything is user based (local userprofile)&lt;/li&gt;
&lt;li&gt;If the shortcut is missing or deleted it gets automatically (re)created&lt;/li&gt;
&lt;li&gt;Possibility to remove shortcut via Intune Win32 app uninstall&lt;/li&gt;
&lt;li&gt;Shortcut can point to: URL, File (UNC) or Folder (UNC)&lt;/li&gt;
&lt;li&gt;Ability to pass shortcut arguments&lt;/li&gt;
&lt;li&gt;Ability to specify shortcut icon (UNC/URL)&lt;/li&gt;
&lt;li&gt;Ability to deploy shortcut together with an app using Intune Win32 app dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Architecture
 &lt;div id="architecture" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#architecture" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;A simple PowerShell script which does all the shortcut stuff is wrapped as Intune Win32 App. This adds possibility to detect the presence of the shortcut and if required to uninstall it with Intune. In order to work with the redirected desktop to OneDrive with Known Folder Move we can take advantage of the &lt;code&gt;[Environment]::GetFolderPath(&amp;quot;Desktop&amp;quot;)&lt;/code&gt; method to resolve the desktop location. Based on the Win32 app configuration the shortut get&amp;rsquo;s either created on the users personal desktop or on the allusers desktop.&lt;/p&gt;</description></item><item><title>Enroll macOS devices to Microsoft Intune</title><link>https://tech.nicolonsky.ch/enroll-macos-to-microsoft-intune/</link><pubDate>Thu, 23 May 2019 14:22:05 +0000</pubDate><guid>https://tech.nicolonsky.ch/enroll-macos-to-microsoft-intune/</guid><description>&lt;p&gt;As Microsoft starts to empower the integration for non Windows devices and also the available apps for macOS devices you might want to profit from your existing MDM solution of choice (Microsoft Intune) and enable features like conditional access or Windows Defender ATP on your  macOS devices. This post covers the enrollment with the company portal app. If you want to enroll your devices with DEP (device enrollment program) you can find a great guide &lt;a href="https://www.robinhobo.com/how-to-configure-apple-dep-within-microsoft-intune-and-migrate-existing-dep-devices-from-another-mdm-solution-to-microsoft-intune/" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;!--kg-card-begin: markdown--&gt;

&lt;h2 class="relative group"&gt;Mind the enrollment restrictions
 &lt;div id="mind-the-enrollment-restrictions" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mind-the-enrollment-restrictions" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start and check the configured enrollment restrictions to make sure that the macOS enrollment is not blocked for your tenant. You&amp;rsquo;ll find them on your Intune dashboard under: Microsoft Intune &amp;gt; Device enrollment - Enrollment restrictions&lt;/p&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;figure class="kg-card kg-image-card kg-card-hascaption"&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2019/05/enrolment-restrictions.png" class="kg-image"&gt;&lt;figcaption&gt;Intune enrollment restrictions&lt;/figcaption&gt;&lt;/figure&gt;&lt;!--kg-card-begin: markdown--&gt;

&lt;h2 class="relative group"&gt;Get an Apple MDM push certificate
 &lt;div id="get-an-apple-mdm-push-certificate" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#get-an-apple-mdm-push-certificate" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Without loosing into details - you need an Apple MDM push certificate (also called APNs) to manage apple devices with MDM. The push certificate allows your MDM solution to send notifications about device actions to your end devices (e.g. wipe, app installation, new policy). To request a push certificate you need a valid Apple ID.&lt;/p&gt;</description></item><item><title>Introducing the OneDrive AutoMountTeamSites setting</title><link>https://tech.nicolonsky.ch/onedrive-automountteamsites/</link><pubDate>Sun, 17 Mar 2019 16:03:09 +0000</pubDate><guid>https://tech.nicolonsky.ch/onedrive-automountteamsites/</guid><description>&lt;p&gt;Reviewing the latest OneDrive features I wanted to try the new &lt;em&gt;AutoMountTeamSites&lt;/em&gt; setting which lets you preconfigure SharePoint online sites to sync automatically for defined users and devices.&lt;/p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;Updated on 12.07.2019&lt;/strong&gt;: &lt;a href="#intune-administrative-template-configuration"&gt;Included the Intune administrative template configuration&lt;/a&gt;&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;The setting is officially described as follow:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;This setting lets you specify SharePoint team site libraries to sync automatically the next time users sign in to the OneDrive sync client. (Microsoft)&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;If you enable this setting, the OneDrive sync client will automatically download the contents of the libraries you specified as online-only files the next time the user signs in. The user won&amp;rsquo;t be able to stop syncing the libraries. (Microsoft)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;Prerequisites
 &lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In order to get things up an running we need at least:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OneDrive sync client version 19.012.0121.0011 or newer&lt;/li&gt;
&lt;li&gt;Windows 10 Version 1709 or newer&lt;/li&gt;
&lt;li&gt;OneDrive Files On-Demand enabled (&lt;a href="https://tech.nicolonsky.ch/onedrive-automountteamsites/#intune-administrative-template-configuration" &gt;described below&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be aware that this feature is not supported with on-premises SharePoint sites and not recommended to enable this setting for more than 1'000 devices. The device limit is related to the Windows Push Notification Service which tells the OneDrive clients when a file change occurs on a server side. When you exceed that limit clients will find themselves in a polling mode. &lt;a href="https://hansbrender.com/2019/04/04/onedrive-update-for-gpo-team-site-libraries-to-sync-automatically/" target="_blank" rel="noreferrer"&gt;Hans Brender explains this behavior well on his blog&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Intune map network drives and execute PowerShell script on each user logon</title><link>https://tech.nicolonsky.ch/intune-execute-powershell-script-on-each-user-logon/</link><pubDate>Fri, 11 Jan 2019 20:51:36 +0000</pubDate><guid>https://tech.nicolonsky.ch/intune-execute-powershell-script-on-each-user-logon/</guid><description>&lt;p&gt;Recently a customer needed a drive mapping solution to access his on premise file shares during his transition phase to a cloud-only workplace. I wanted to share the solution with you because it&amp;rsquo;s  a frequently asked question around a modern workplace migration. The following solution can also be extended or modified for a printer mapping or other PowerShell scripts which need to run on each user logon.&lt;/p&gt;
&lt;!--kg-card-begin: markdown--&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;Updated 04.08.2019&lt;/strong&gt;: I&amp;rsquo;ve developed an automated solution to generate network drive mapping configurations with an online tool which also migrates group policy network drive mappings. See: &lt;a href="https://tech.nicolonsky.ch/next-level-network-drive-mapping-with-intune"&gt;next-level-network-drive-mapping-with-intune&lt;/a&gt;.&lt;/mark&gt;&lt;/p&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;!--kg-card-begin: markdown--&gt;
&lt;p&gt;&lt;a href="https://github.com/nicolonsky/Techblog/tree/master/IntuneNetworkDrives" target="_blank" rel="noreferrer"&gt;Direct link to the final scripts&lt;/a&gt;&lt;/p&gt;
&lt;!--kg-card-end: markdown--&gt;
&lt;p&gt;Lets assume we have the following scenario:&lt;/p&gt;
&lt;figure class="kg-card kg-image-card"&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2019/01/Hybrid-AAD.png" class="kg-image"&gt;&lt;/figure&gt;
- Customer with hybrid user-identities (Azure AD Connect)
- On premise ressources with legacy file shares
- Devices are Azure AD joined &amp;nbsp;( **not** hybrid joined)
- MDM managed with Intune
- [Optional] Always on VPN for external on-premise resource access
- [Optional] Windows Hello for Business deployment as described [here](https://docs.microsoft.com/en-us/windows/security/identity-protection/hello-for-business/hello-hybrid-aadj-sso) 

&lt;h2 class="relative group"&gt;Architecture
 &lt;div id="architecture" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#architecture" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;With my colleague &lt;a href="https://blog.alschneiter.com/" target="_blank" rel="noreferrer"&gt;Alain Schneiter&lt;/a&gt; I designed the following solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Main PowerShell script stored on Azure blob storage which handles the drive mapping -  driveletters, UNC paths and descriptions can be configured within the script  &lt;/li&gt;
&lt;li&gt;Client side script deployed with Intune which triggers the main script during logon.  The main script is not stored locally which makes it easy to customize (no updates oder changes needed on client side)&lt;/li&gt;
&lt;li&gt;Deployment is user targeted via Azure AD group and Intune&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Azure blob storage configuration
 &lt;div id="azure-blob-storage-configuration" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#azure-blob-storage-configuration" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;We wanted to store the script within Azure because the customer was already using Azure blob storage. It&amp;rsquo;s also possible to store the PowerShell script on GitHub if you don&amp;rsquo;t want to use Azure.&lt;/p&gt;</description></item><item><title>Clean up stale Azure AD devices</title><link>https://tech.nicolonsky.ch/clean-up-azure-ad-devices/</link><pubDate>Thu, 10 Jan 2019 22:25:00 +0000</pubDate><guid>https://tech.nicolonsky.ch/clean-up-azure-ad-devices/</guid><description>&lt;p&gt;If you are using Azure AD and the time passes you&amp;rsquo;ll have a lot of old device entries. If you enable the automatic device cleanup rule in Microsoft Intune the device is only removed within MDM and the Azure AD entry still exists.&lt;/p&gt;
&lt;figure class="kg-card kg-image-card kg-card-hascaption"&gt;&lt;img src="https://tech.nicolonsky.ch/content/images/2019/01/image-1.png" class="kg-image"&gt;&lt;figcaption&gt;Intune device cleanup rule&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;For this reason I created a tiny PowerShell snippet to create a report with all devices which didn&amp;rsquo;t contact your Azure AD tenant since the treshold date specified. If you confirm the operation you can also delete all affected devices.&lt;/p&gt;
&lt;!--kg-card-begin: markdown--&gt;
&lt;p&gt;&lt;mark&gt;&lt;em&gt;Please be careful when running the script because when removing a device from Azure AD the stored Bitlocker recovery keys are also removed. I can recommend &lt;a href="http://rzander.azurewebsites.net/bitlocker-management-with-azure-storage-table/"&gt;Roger Zander&amp;rsquo;s Azure table-based Bitlocker recovery key solution&lt;/a&gt;.&lt;/em&gt;&lt;/mark&gt;&lt;/p&gt;
&lt;!--kg-card-end: markdown--&gt;&lt;!--kg-card-begin: markdown--&gt;&lt;script src="https://gist.github.com/nicolonsky/231844d2c383396331a94024bffbd7ff.js"&gt; &lt;/script&gt;&lt;!--kg-card-end: markdown--&gt;</description></item><item><title>Deploy OneDrive KFM with Microsoft Intune OMA-URI</title><link>https://tech.nicolonsky.ch/onedrive-known-folder-move-ms-intune/</link><pubDate>Thu, 06 Sep 2018 18:37:21 +0000</pubDate><guid>https://tech.nicolonsky.ch/onedrive-known-folder-move-ms-intune/</guid><description>&lt;p&gt;OneDrive KFM (Known Folder Move) allows you to redirect common Windows folders (Desktop, Documents and Pictures) to the users personal OneDrive. OneDrive Known Folder Move is the modern replacement for the well known folder redirection group policy. The deployment with Microsoft Intune allows you to trigger or automate the OneDrive KFM configuration for your end users.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Updated on 04.08.2019&lt;/strong&gt;: Added administrative template configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post is based on a great article from Oliver Kieselbach about &lt;a href="https://oliverkieselbach.com/2017/11/07/deep-dive-admx-ingestion-to-configure-silentaccountconfig-with-onedrive/" target="_blank" rel="noreferrer"&gt;Deep dive ADMX ingestion to configure SilentAccountConfig with OneDrive&lt;/a&gt;. I used his blog to play around with the admx ingestion.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Prerequisites
 &lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;To automatically deploy OneDrive Known Folder Move the following prerequisites must be met:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OneDrive sync client with build 18.111.0603.0004 or greater&lt;/li&gt;
&lt;li&gt;Azure AD Joined or Hybrid Azure AD Joined Windows 10 Device Running Windows 10 1709 or later&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Intune Configuration
 &lt;div id="intune-configuration" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#intune-configuration" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Configure SilentAccountConfig
 &lt;div id="configure-silentaccountconfig" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#configure-silentaccountconfig" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;Option #1 - ADMX Templates
 &lt;div id="option-1---admx-templates" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#option-1---admx-templates" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;With SilentAccountConfig enabled OneDrive for Business gets automatically configured with the current user account who&amp;rsquo;s signing in to Windows.&lt;/p&gt;</description></item><item><title>Windows 10 1803 New MDM Policy CSP Settings</title><link>https://tech.nicolonsky.ch/windows-10-1803-new-mdm-policy-csp-settings/</link><pubDate>Sat, 21 Apr 2018 22:11:30 +0000</pubDate><guid>https://tech.nicolonsky.ch/windows-10-1803-new-mdm-policy-csp-settings/</guid><description>&lt;p&gt;Hello. Long time no see. Finally I&amp;rsquo;m back with a new post. This time I created a nice little list with Windows 10 1803 New MDM Policy CSP Settings for the next Windows 10 release. If you&amp;rsquo;re not familiar with Policy CSP Settings - that are GPO Settings configureable over an Intune OMA-Uri Policy. Here&amp;rsquo;s &lt;a href="https://docs.microsoft.com/en-us/windows/configuration/provisioning-packages/how-it-pros-can-use-configuration-service-providers" target="_blank" rel="noreferrer"&gt;a great introducation to Policy CSP Settings.&lt;/a&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;My favorite policy CPS&amp;rsquo;s available with Windows 10 1803
 &lt;div id="my-favorite-policy-cpss-available-with-windows-10-1803" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#my-favorite-policy-cpss-available-with-windows-10-1803" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;!--kg-card-begin: markdown--&gt;
&lt;p&gt;The following CSP&amp;rsquo;s are available on Windows 10 1803 and later:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ControlPolicyConflict: &lt;strong&gt;MDMWinsOverGP&lt;/strong&gt;&lt;br&gt;
This policy allows the IT admin to control which policy will be used whenever both the MDM policy and its equivalent Group Policy are set on the device.&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/windows/client-management/mdm/policy-csp-controlpolicyconflict" target="_blank" rel="noreferrer"&gt;Microsoft docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LanmanWorkstation: &lt;strong&gt;EnableInsecureGuestLogons&lt;/strong&gt;&lt;br&gt;
This policy setting determines if the SMB client will allow insecure guest logons to an SMB server&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/windows/client-management/mdm/policy-csp-lanmanworkstation" target="_blank" rel="noreferrer"&gt;Microsoft docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RestrictedGroups: &lt;strong&gt;ConfigureGroupMembership&lt;/strong&gt;&lt;br&gt;
This security setting allows an administrator to define the members of a security-sensitive (restricted) group.&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/windows/client-management/mdm/policy-csp-restrictedgroups" target="_blank" rel="noreferrer"&gt;Microsoft docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--kg-card-end: markdown--&gt;
&lt;p&gt;You can find the entire list (CSV) on &lt;a href="https://github.com/nicolonsky/Techblog/blob/master/PolicyCSP/CSPPolicyList_New.csv" target="_blank" rel="noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The scripts to retrieve and compare the available Policy CSP&amp;rsquo;s for a Windows version are available on &lt;a href="https://github.com/nicolonsky/Techblog/tree/master/PolicyCSP" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;. Feel free to leave feedback or improvement changes.&lt;/p&gt;</description></item></channel></rss>