<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://evil365.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://evil365.com/" rel="alternate" type="text/html" /><updated>2026-09-27T19:22:03+00:00</updated><id>https://evil365.com/feed.xml</id><title type="html">Welcome to the land of everything Microsoft Intune!</title><subtitle></subtitle><author><name>Mads Johansen</name></author><entry><title type="html">Update Lenovo Devices with Lenovo Commercial Vantage using Intune</title><link href="https://evil365.com/lenovo/Update-Lenovo-Devices-With-Lenovo-Commercial-Vantage-Using-Intune/" rel="alternate" type="text/html" title="Update Lenovo Devices with Lenovo Commercial Vantage using Intune" /><published>2026-09-27T00:00:00+00:00</published><updated>2026-09-27T00:00:00+00:00</updated><id>https://evil365.com/lenovo/Update-Lenovo-Devices-With-Lenovo-Commercial-Vantage-Using-Intune</id><content type="html" xml:base="https://evil365.com/lenovo/Update-Lenovo-Devices-With-Lenovo-Commercial-Vantage-Using-Intune/"><![CDATA[<p>A while back I wrote a blog post about how to <a href="/dell/UpdateDriversBIOS-DellCommandUpdate/">Update Dell devices with Dell Command Update using Intune</a>, and it turned out to be one of the most read posts on this blog. Every now and then I get the question: “That’s great, but what if we are running Lenovo devices?” - So here we go. In this blog post we will go through how to manage driver and BIOS updates on Lenovo devices, using Lenovo’s own tool, Lenovo Commercial Vantage, deployed and managed with Intune.</p>

<h2 id="why-its-important-to-keep-drivers-and-bios-up-to-date">Why it’s important to keep drivers and BIOS up-to-date</h2>

<p>This topic is still not sexy at all to talk about in IT, but it keeps getting more important. Drivers, BIOS and firmware are no longer something you set once when the device is imaged and then forget about. Hardware vendors ship a steady stream of updates, and a big chunk of them are security fixes.</p>

<p>A few reasons why you should care:</p>

<ul>
  <li><strong>Security:</strong> BIOS and firmware vulnerabilities sit below the operating system. That means your EDR, antivirus and most of your other security controls can’t see or stop an attacker who is living in the firmware. Features like Secure Boot, TPM, Kernel DMA protection and virtualization based security all depend on the firmware being in good shape. Keeping the BIOS up-to-date is the only real fix when a vulnerability is found at that level.</li>
  <li><strong>Stability and performance:</strong> Many of the “random” issues end-users report, such as bluescreens, docking station issues, Wi-Fi dropping, poor battery life, or devices not waking from sleep, are often fixed by a driver or BIOS update.</li>
  <li><strong>Compatibility:</strong> New Windows feature updates, new docking stations and new peripherals sometimes require a minimum driver or BIOS version to work properly.</li>
  <li><strong>Less noise for the service desk:</strong> Fewer weird hardware issues means fewer tickets. Simple as that.</li>
</ul>

<h2 id="lenovo-commercial-vantage-vs-windows-autopatch-driver-and-firmware-updates">Lenovo Commercial Vantage vs. Windows Autopatch driver and firmware updates</h2>

<p>Before we jump into the setup, let’s talk about the elephant in the room. Why not just use <a href="https://learn.microsoft.com/en-us/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-driver-and-firmware-updates">driver and firmware updates in Windows Autopatch</a> (formerly known as the driver update management in Intune) and call it a day?</p>

<p>Honestly, for a lot of organizations, that’s a perfectly fine option, and it keeps getting better. But there are some differences worth knowing about:</p>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>Lenovo Commercial Vantage</th>
      <th>Windows Autopatch driver/firmware updates</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Speed of delivery</strong></td>
      <td>Updates are available as soon as Lenovo releases them</td>
      <td>Depends on if and when Lenovo publishes the update to Windows Update - This can be weeks or months later, and some updates never get published there</td>
    </tr>
    <tr>
      <td><strong>Update catalog</strong></td>
      <td>Full Lenovo catalog for the model, including BIOS, drivers, firmware and Lenovo utilities</td>
      <td>Only what the vendor has chosen to publish to Windows Update</td>
    </tr>
    <tr>
      <td><strong>Extra tooling needed</strong></td>
      <td>Yes - an app to deploy and a set of ADMX policies to maintain</td>
      <td>No - built into Intune/Autopatch</td>
    </tr>
    <tr>
      <td><strong>Multi-vendor</strong></td>
      <td>Lenovo only</td>
      <td>Works for all vendors in one place</td>
    </tr>
    <tr>
      <td><strong>Approval workflow</strong></td>
      <td>Controlled through policies (categories, severity, schedule)</td>
      <td>Manual or automatic approval with deferral per policy, with a nice overview of the available updates in Intune</td>
    </tr>
    <tr>
      <td><strong>Reporting</strong></td>
      <td>Local logs on the device (unless you build your own reporting)</td>
      <td>Reporting built into Intune</td>
    </tr>
    <tr>
      <td><strong>End-user experience</strong></td>
      <td>Lenovo’s own notifications and reboot prompts</td>
      <td>Native Windows Update experience, which ties in with your existing update rings</td>
    </tr>
  </tbody>
</table>

<p>So in short: Windows Autopatch gives you a simpler, more integrated and multi-vendor experience, while Lenovo Commercial Vantage gives you <strong>speed</strong> and the <strong>full catalog</strong>. If you have a mixed estate or you just want the least amount of moving parts, Autopatch is a great choice. If you want the latest BIOS and security fixes on your Lenovo devices as quickly as possible, Commercial Vantage is still the way to go.</p>

<blockquote class="notice--info">
  <p>Don’t let both solutions fight over the same updates. If you go with Commercial Vantage for driver and BIOS updates on your Lenovo devices, I recommend just disabling Driver updates via WufB or Autopatch.</p>
</blockquote>

<h2 id="getting-started">Getting started</h2>

<h3 id="download-lenovo-commercial-vantage">Download Lenovo Commercial Vantage</h3>

<p>First we need the latest version of the Lenovo Commercial Vantage package. You can find it on <a href="https://support.lenovo.com/cg/da/solutions/hf003321">Lenovo’s support site here</a>.</p>

<p>The download link is easy to miss. Scroll down past the screenshot of the app, and click the “Version xx.xxxx.xx.x (Application and Deployment Guide)” link to download the zip file:</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/Lenovo-DownloadCommercialVantage.png?raw=true" alt="LenovoCV" title="Download Lenovo Commercial Vantage" /></p>

<p>Once downloaded, extract the zip file to a folder of your choice.</p>

<h3 id="import-the-admx-templates-to-intune">Import the ADMX templates to Intune</h3>

<p>Inside the extracted folder, you will find a folder called <strong>“Group Policy Settings”</strong>. This is where the ADMX template for Commercial Vantage lives, and it’s what we need to import into Intune, so we can control Commercial Vantage with policies. You will find the <code class="language-plaintext highlighter-rouge">CommercialVantage.admx</code> file, and the matching .ADML file under the en-US subfolder.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/ImportADMX-1.png?raw=true" alt="LenovoCV" title="Lenovo Commercial Vantage ADMX Templates" /></p>

<p>Head on over to Intune -&gt; Devices -&gt; Configuration. Then click the “Import ADMX” tab in the top, and click “Import”.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/ImportADMX-2.png?raw=true" alt="LenovoCV" title="Import ADMX in Intune" /></p>

<p>Select the <code class="language-plaintext highlighter-rouge">CommercialVantage.admx</code> file from the “Group Policy Settings” folder, and for the .ADML file, you can find it under the en-US subfolder. Then hit next and create. Wait 1-2 minutes, then hit “Refresh” - The template should show as “Available”. As with any other ADMX import in Intune, it can be a bit sluggish, so be patient with this one.</p>

<h3 id="upload-failed-import-windowsadmx-first">Upload failed? Import Windows.admx first</h3>

<p>If you haven’t imported the Windows ADMX template to Intune before, the upload of the Commercial Vantage template will fail. The status will show as “Upload failed”:</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/ImportADMX-4.png?raw=true" alt="LenovoCV" title="Upload failed" /></p>

<p>If you click on the status, you will see the error details: <strong>“ADMX file referenced not found NamespaceMissing:Microsoft.Policies.Windows. Please upload it first.”</strong></p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/ImportADMX-3.png?raw=true" alt="LenovoCV" title="ADMX file referenced not found NamespaceMissing:Microsoft.Policies.Windows" /></p>

<p>This is because the Commercial Vantage template depends on the Windows ADMX template. To fix it:</p>

<ol>
  <li>Delete the failed Commercial Vantage upload (click the three dots on the right -&gt; Delete).</li>
  <li>Import the <code class="language-plaintext highlighter-rouge">Windows.admx</code> file from <code class="language-plaintext highlighter-rouge">C:\Windows\PolicyDefinitions</code>, and the matching <code class="language-plaintext highlighter-rouge">Windows.adml</code> file from <code class="language-plaintext highlighter-rouge">C:\Windows\PolicyDefinitions\en-US</code>.</li>
  <li>Wait until the Windows template shows as “Available”, then import the Commercial Vantage template again.</li>
</ol>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/ImportADMX-5.png?raw=true" alt="LenovoCV" title="Windows.admx under C:\Windows\PolicyDefinitions" /></p>

<p>Once both templates show as “Available”, you’re ready to move on:</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/ImportADMX-6.png?raw=true" alt="LenovoCV" title="CommercialVantage.admx and Windows.admx available" /></p>

<h2 id="packaging-lenovo-commercial-vantage-as-a-win32-app">Packaging Lenovo Commercial Vantage as a Win32 app</h2>

<p>Now we need to get Commercial Vantage packaged and uploaded to Intune as a Win32 app. Package the <strong>entire extracted folder</strong> using the <a href="https://github.com/microsoft/Microsoft-Win32-Content-Prep-Tool">Microsoft Win32 Content Prep Tool</a>, with <code class="language-plaintext highlighter-rouge">VantageInstaller.exe</code> as the setup file.</p>

<p>You can use below install and uninstall command:</p>

<ul>
  <li><strong>Install command:</strong> <code class="language-plaintext highlighter-rouge">VantageInstaller.exe Install -Vantage</code></li>
  <li><strong>Uninstall command:</strong> <code class="language-plaintext highlighter-rouge">VantageInstaller.exe Uninstall -Vantage</code></li>
  <li><strong>Install behavior:</strong> System</li>
</ul>

<p>The install command makes sure Lenovo Commercial Vantage is installed in system context, together with the relevant add-ons it needs.</p>

<h3 id="detection-rule">Detection rule</h3>

<p>For detection, we will use a custom detection script. <a href="https://www.linkedin.com/in/pej1025/">Philip Jorgensen</a> has made a great detection script for Commercial Vantage, which you can download from his GitHub: <a href="https://github.com/philjorgensen/ConfigMgr/blob/main/Applications/Detect-CommercialVantage.ps1">Detect-CommercialVantage.ps1</a>.</p>

<blockquote class="notice--warning">
  <p>Make sure to adjust the version in the top of the script, so it matches the version of Commercial Vantage you are deploying. Otherwise the detection will either fail, or Intune will think an old version is good enough. Remember to update it every time you package a new version.</p>
</blockquote>

<p>Upload the script under “Detection rules” -&gt; “Use a custom detection script”, and assign the app to your Lenovo devices.</p>

<blockquote class="notice--info">
  <p>Use an Intune filter on the assignment, such as <code class="language-plaintext highlighter-rouge">(device.manufacturer -eq "LENOVO")</code>, so you can assign to your existing device groups without the app landing on non-Lenovo devices.</p>
</blockquote>

<h2 id="deploying-baseline-policies-from-intune">Deploying baseline policies from Intune</h2>

<p>Now for the fun part. Let’s create a new configuration profile: Intune -&gt; Devices -&gt; Configuration -&gt; Create -&gt; New policy. Select “Windows 10 and later” as platform, “Templates” as profile type, and then “Imported Administrative templates”. Give the policy a nice name like “Lenovo Commercial Vantage Update Settings”, and hit next.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-0.png?raw=true" alt="LenovoCV" title="Create a profile - Imported Administrative templates" /></p>

<p>Under Computer Configuration -&gt; Commercial Vantage you will find all the Commercial Vantage settings, organized in folders. The ones we are interested in are under “Device” and “EULA”.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-1.png?raw=true" alt="LenovoCV" title="Commercial Vantage settings" /></p>

<h3 id="device---system-update">Device -&gt; System update</h3>

<p><strong>Company name:</strong> Optional, but a nice touch. This is the company name shown in the System update dialogs, so the end-user can see the updates are coming from their own IT department.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-2-CompanyName.png?raw=true" alt="LenovoCV" title="Company name" /></p>

<h3 id="device---system-update---auto-update">Device -&gt; System update -&gt; Auto update</h3>

<p>This is where the magic happens. You will find all the auto update settings in this folder:</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-4-ConfigureSystemUpdate-AutoUpdatePolicies.png?raw=true" alt="LenovoCV" title="Auto update settings" /></p>

<p>These are the settings I recommend configuring:</p>

<p><strong>“Auto update”:</strong> Set this to “Enabled”. This turns on automatic updates in Commercial Vantage, so updates are installed without the user having to open the app and click “Check for updates”.</p>

<p><strong>“Configure Auto system update”:</strong> Set this to “Enabled” and select all the categories under both critical and recommended updates (application, driver, BIOS, firmware and others), unless you want to filter something out. This controls which types of updates auto update installs. If you leave it not configured, it follows whatever is set in “Configure System update”.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-3-ConfigureSystemUpdate-OptionalPolicy.png?raw=true" alt="LenovoCV" title="Configure Auto system update" /></p>

<p><strong>“Defer update”:</strong> Controls how many times the end-user can defer installing updates (“Defer Limit”, between 1 and 99), and how many minutes there are between each deferral (“Defer Time”). In the example below, the user can defer 3 times, 90 minutes each.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-Deferral.png?raw=true" alt="LenovoCV" title="Defer update" /></p>

<p><strong>“Reboot delay time”:</strong> The number of minutes the user has before the device restarts, after updates that require a restart have been installed (Lenovo calls these “Reboot Type 5” updates). This is the countdown you will see in the restart notification in the end user experience section below. I use 45 minutes in the example below.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-RebootDelay.png?raw=true" alt="LenovoCV" title="Reboot delay time" /></p>

<p><strong>“Schedule the day for Auto update”:</strong> Select which days auto update should run. You have two options: enter specific days of the month in the “Day(s)” field (for example <code class="language-plaintext highlighter-rouge">1;15</code> or <code class="language-plaintext highlighter-rouge">LastDay</code>), or use “Frequency” together with the days of the week. For example, selecting “All” under Frequency and “Monday” under Day of the Week runs auto update every Monday. Combine it with “Schedule the time for Auto update” if you want to control the time of day as well.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-ScheduleDayofUpdate.png?raw=true" alt="LenovoCV" title="Schedule the day for Auto update" /></p>

<p><strong>“Show Pre-Install Notification”:</strong> Set this to “Enabled”. Updates are then downloaded in the background first, and the user gets a notification before any of them are installed. This is the “New updates are ready to install” prompt you will see in the end user experience section below. If you leave it not configured, some updates (the ones that don’t need a restart) are installed silently, and the user is only prompted for the ones that do.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-PreInstall-Notification.png?raw=true" alt="LenovoCV" title="Show Pre-Install Notification" /></p>

<h3 id="eula">EULA</h3>

<p><strong>“Accept EULA automatically”:</strong> Set this to “Enabled”. This accepts the Lenovo End User License Agreement and privacy statement on behalf of the end-user, so they don’t have to agree to it the first time they launch Commercial Vantage.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/LenovoPolicy-ConfigureSystemUpdate-SuppressEULA.png?raw=true" alt="LenovoCV" title="Accept EULA automatically" /></p>

<p>Change these settings based on your testing and your org’s needs. The “Defer update”, “Reboot delay time” and “Show Pre-Install Notification” settings are the ones that will have the biggest impact on the end-user experience, so they are good candidates to adjust per deployment ring.</p>

<p>Finally, assign the policy to your Lenovo devices. Just like with the app, use a device filter such as <code class="language-plaintext highlighter-rouge">(device.manufacturer -eq "LENOVO")</code> if you are assigning to groups that also contain devices from other vendors.</p>

<h2 id="end-user-experience">End user experience</h2>

<p>So what does this look like for the end-user? When Commercial Vantage has found updates that are ready to install, the user gets a prompt listing the updates, in this case a BIOS update and a battery firmware update. The user can choose to “Install and restart”, or cancel and do it later. Notice the text asking the user to leave the device on and plugged in, which is important for BIOS and firmware updates.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/EndUserExperience-DriverUpdate-1.png?raw=true" alt="LenovoCV" title="Lenovo Commercial Vantage - Updates ready to install" /></p>

<p>If the user opens Lenovo Commercial Vantage while the updates are being installed, they can follow the progress under My device -&gt; System update:</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/EndUserExperience-DriverUpdate-2.png?raw=true" alt="LenovoCV" title="Lenovo Commercial Vantage - Installing updates" /></p>

<p>Once the updates are installed, the user gets a restart notification with a countdown. They can either click “Restart now”, or let the countdown run out, and the device restarts on its own.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/EndUserExperience-DriverUpdate-3.png?raw=true" alt="LenovoCV" title="Lenovo Commercial Vantage - Restart notification" /></p>

<blockquote class="notice--warning">
  <p>The restart prompt only has a “Restart now” button, with no option to postpone it. Make sure your users know this is coming, so nobody loses unsaved work when the countdown runs out.</p>
</blockquote>

<h2 id="nice-to-have-battery-and-warranty-information-in-wmi">Nice to have: Battery and warranty information in WMI</h2>

<p>This has nothing to do with drivers and BIOS, but it’s worth a mention while you are in the Commercial Vantage policies anyway. Commercial Vantage can write battery and warranty information to WMI, in the <code class="language-plaintext highlighter-rouge">root\Lenovo</code> namespace. That’s really nice for custom reporting and monitoring, for instance with a remediation script, a custom compliance rule, or by collecting it into Log Analytics.</p>

<p><strong>“Write battery information to WMI table”</strong> (Device -&gt; Device settings -&gt; Power): Set this to “Enabled”, and configure how often the battery information should be written:</p>

<ul>
  <li><strong>Schedule type:</strong> 0 = daily, 1 = weekly, 2 = monthly</li>
  <li><strong>Schedule day:</strong> Set to 0 if the schedule type is daily. For weekly, use 0-6 (0 = Sunday, 1 = Monday and so on). For monthly, use 1-31, or -1 for the last day of the month</li>
  <li><strong>Schedule time:</strong> The time of day in HH:mm:ss format, for example 10:00:00</li>
</ul>

<p>In the example below, the battery information is written every Monday at 10:00.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/Lenovo-NiceToHave-WriteBatteryToWMI.png?raw=true" alt="LenovoCV" title="Write battery information to WMI table" /></p>

<p><strong>“Write warranty information to WMI table”</strong> (Device -&gt; Warranty): Set this to “Enabled”.</p>

<p><img src="/assets/images/2026-09-27-Lenovo-CommercialVantage-Intune/Lenovo-NiceToHave-WriteWarrantyToWMI.png?raw=true" alt="LenovoCV" title="Write warranty information to WMI table" /></p>

<p>Once the policy has applied and Commercial Vantage has written the information, you can query it with PowerShell:</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Battery information - the same information you see in the Commercial Vantage app</span><span class="w">
</span><span class="n">Get-CimInstance</span><span class="w"> </span><span class="nt">-Namespace</span><span class="w"> </span><span class="nx">root\Lenovo</span><span class="w"> </span><span class="nt">-ClassName</span><span class="w"> </span><span class="nx">Lenovo_Battery</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Format-List</span><span class="w"> </span><span class="o">*</span><span class="w">

</span><span class="c"># Warranty information</span><span class="w">
</span><span class="n">Get-CimInstance</span><span class="w"> </span><span class="nt">-Namespace</span><span class="w"> </span><span class="nx">root\Lenovo</span><span class="w"> </span><span class="nt">-ClassName</span><span class="w"> </span><span class="nx">Lenovo_WarrantyInformation</span><span class="w"> </span><span class="o">|</span><span class="w">
    </span><span class="n">Select-Object</span><span class="w"> </span><span class="nx">SerialNumber</span><span class="p">,</span><span class="w"> </span><span class="nx">Product</span><span class="p">,</span><span class="w"> </span><span class="nx">StartDate</span><span class="p">,</span><span class="w"> </span><span class="nx">EndDate</span><span class="p">,</span><span class="w"> </span><span class="nx">LastUpdateTime</span><span class="w">

</span><span class="c"># Details of each warranty purchased for the device</span><span class="w">
</span><span class="n">Get-CimInstance</span><span class="w"> </span><span class="nt">-Namespace</span><span class="w"> </span><span class="nx">root\Lenovo</span><span class="w"> </span><span class="nt">-ClassName</span><span class="w"> </span><span class="nx">Lenovo_WarrantyElement</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Format-List</span><span class="w"> </span><span class="o">*</span><span class="w">
</span></code></pre></div></div>

<p>If the classes are not there yet, give it some time. The battery information is only written on the schedule you configured, and the classes are only created once Commercial Vantage has written the information for the first time.</p>

<p>You can find more details about the WMI classes in <a href="https://docs.lenovocdrt.com/guides/lcv/configuration/">Lenovo’s Commercial Vantage configuration guide</a>.</p>

<p>If you want to take the warranty information a step further, and get it into a Log Analytics workspace for reporting across all your devices, check out this blog post by <a href="https://www.linkedin.com/in/mattiasmelkersen/">Mattias Melkersen</a>: <a href="https://blog.mindcore.dk/2023/01/operationalize-lenovo-devices-in-an-intune-only-environment/">Operationalize Lenovo devices in an Intune only environment</a>. It shows an example of how to build a Log Analytics workspace and ingest the data. Thanks to Mattias for sharing it with the community.</p>

<h2 id="final-words">Final words</h2>

<p>I hope you found this walkthrough useful. Just like with Dell Command Update, there are pros and cons to using the vendor’s own tool compared to just using Windows Autopatch for drivers and firmware. The Windows Update experience is more integrated and works across all your hardware vendors, but if you use Lenovo Commercial Vantage, you will get BIOS updates, security fixes and driver updates on your Lenovo devices much faster.</p>

<p>A big thanks to <a href="https://www.linkedin.com/in/pej1025/">Philip Jorgensen</a> and <a href="https://www.linkedin.com/in/mattiasmelkersen/">Mattias Melkersen</a> for sharing their work with the community. If you are managing Lenovo devices, Philip’s <a href="https://github.com/philjorgensen">GitHub repository</a> and Mattias’ post on <a href="https://blog.mindcore.dk/2023/01/operationalize-lenovo-devices-in-an-intune-only-environment/">operationalizing Lenovo devices in an Intune only environment</a> are both well worth a look.</p>

<p>That’s all folks :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Lenovo" /><category term="Update drivers" /><category term="Update BIOS" /><category term="Update Firmware" /><category term="Endpoint Security" /><category term="Import ADMX Templates" /><category term="Lenovo Commercial Vantage" /><category term="Intune" /><summary type="html"><![CDATA[A while back I wrote a blog post about how to Update Dell devices with Dell Command Update using Intune, and it turned out to be one of the most read posts on this blog. Every now and then I get the question: “That’s great, but what if we are running Lenovo devices?” - So here we go. In this blog post we will go through how to manage driver and BIOS updates on Lenovo devices, using Lenovo’s own tool, Lenovo Commercial Vantage, deployed and managed with Intune.]]></summary></entry><entry><title type="html">Add Microsoft EPM Agent version to your software inventory</title><link href="https://evil365.com/intune/Add-Microsoft-EPM-Agent-version-to-your-software-inventory/" rel="alternate" type="text/html" title="Add Microsoft EPM Agent version to your software inventory" /><published>2026-09-17T00:00:00+00:00</published><updated>2026-09-17T00:00:00+00:00</updated><id>https://evil365.com/intune/Add-Microsoft-EPM-Agent-version-to-your-software-inventory</id><content type="html" xml:base="https://evil365.com/intune/Add-Microsoft-EPM-Agent-version-to-your-software-inventory/"><![CDATA[<p>If you’re managing Microsoft Endpoint Privilege Management (EPM) with Intune, the agent version is one of those values that is useful to report on and include in your software inventory.</p>

<h2 id="why-this-matters">Why this matters</h2>

<p>When you are managing a modern endpoint estate, software inventory is about more than just knowing what is installed. It is also about knowing whether the right version is deployed, whether devices are healthy, and whether upcoming policy changes or feature updates may require action.</p>

<p>The Microsoft EPM agent is no exception. If you want to validate rollout progress, confirm the version on a device, or help support teams troubleshoot a policy issue, having the agent version in your inventory is incredibly useful.</p>

<h2 id="remediation-to-write-epm-versioning-to-installed-apps">Remediation to write EPM Versioning to installed apps</h2>

<p>You can use Intune’s remediation system to continuously write the EPM version information to the installed apps on the device. When you do this, it makes sure the “Discovered apps” functionality in Intune can also inventory the agent version, whilst also adding support for your own 3rd party SAM systems such as Snow Inventory or similar.</p>

<p>You can find the remediation I wrote on my GitHub <a href="https://github.com/thisisevilevil/IntunePublic/tree/main/Remediations/EPM%20Agent%20Version%20to%20Software%20list">here</a></p>

<p>Assign to “All devices” and have it run daily. Make sure to tick “Run script in 64-bit PowerShell”.
<img src="/assets/images/2026-09-17-Adding-Microsoft-EPM-Agent-Software-Inventory-Reports/Remediation-Screenshot.png?raw=true" alt="EPM" title="Remediation script settings - run in 64-bit PowerShell" /></p>

<p>Once you have it running, this is what it’s going to look like in your installed apps on your endpoints:
<img src="/assets/images/2026-09-17-Adding-Microsoft-EPM-Agent-Software-Inventory-Reports/EPMReport-1-InstalledApps.png?raw=true" alt="EPM" title="Microsoft EPM Agent in Windows Installed apps" /></p>

<p>In Intune you will see it under discovered apps:
<img src="/assets/images/2026-09-17-Adding-Microsoft-EPM-Agent-Software-Inventory-Reports/EPMReport-2-Intune.png?raw=true" alt="EPM" title="Microsoft EPM Agent in Intune Discovered apps" /></p>

<h2 id="wrapping-up">Wrapping up</h2>

<p>Back when we were rolling out EPM at one of my customers, an early adopter, the EPM team would keep asking us for the client version during debugging sessions, and we had to go chase it in the registry every time. Hence this script. It’s a small thing, but it did reveal quite a few devices stuck on an old version, which the EPM team then helped us get fixed. We did of course ask for the version to be written to “Installed apps” natively, but they had their reasons for not doing it at the time.</p>

<p>That’s all for now. Have a nice day :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Intune" /><category term="EPM" /><category term="Microsoft EPM" /><category term="Endpoint Privilege Management" /><category term="Software Inventory" /><category term="Intune" /><summary type="html"><![CDATA[If you’re managing Microsoft Endpoint Privilege Management (EPM) with Intune, the agent version is one of those values that is useful to report on and include in your software inventory.]]></summary></entry><entry><title type="html">VBscript deprecation: Replacement for slmgr.vbs</title><link href="https://evil365.com/windows/intune/VBScript-Deprecation-Replacement-for-slmgr/" rel="alternate" type="text/html" title="VBscript deprecation: Replacement for slmgr.vbs" /><published>2026-09-11T00:00:00+00:00</published><updated>2026-09-11T00:00:00+00:00</updated><id>https://evil365.com/windows/intune/VBScript-Deprecation-Replacement-for-slmgr</id><content type="html" xml:base="https://evil365.com/windows/intune/VBScript-Deprecation-Replacement-for-slmgr/"><![CDATA[<p>If your organization still uses <code class="language-plaintext highlighter-rouge">slmgr.vbs</code> to activate Windows, check product keys, or read licensing status, you should start planning the change now.</p>

<p>I also wrote about this earlier this year in the context of the broader VBScript deprecation story: <a href="https://evil365.com/vbscript/VBScript-Deprecation/">When Removing VBScript Breaks Your AMD Chipset Driver</a></p>

<p>Microsoft has also published a useful detection-focused article on monitoring for VBScript usage: <a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/vbscript-deprecation-detection-strategies-for-windows/4414325">VBScript deprecation: Detection strategies for Windows - Windows IT Pro Blog</a></p>

<p>The dependency is easy to miss because <code class="language-plaintext highlighter-rouge">slmgr.vbs</code> has been around for ages, but it is still common in scripts, runbooks, task sequences, you name it.</p>

<h2 id="why-this-matters-now">Why this matters now</h2>

<p>Microsoft’s current guidance is straightforward:</p>

<ul>
  <li>VBScript remains available during the transition phase, but it is no longer the preferred method.</li>
  <li>It will no longer be enabled by default in upcoming Windows releases - Can be enabled with a FoD (Feature on Demand)</li>
  <li>Eventually, it will be removed from future Windows releases.</li>
</ul>

<p>Any workflow depending on <code class="language-plaintext highlighter-rouge">slmgr.vbs</code> should be identified, tested, and migrated before the environment reaches the final removal stage.</p>

<h2 id="the-windows-activation-replacement">The Windows activation replacement</h2>

<p>The recommended replacement for common activation automation is the <code class="language-plaintext highlighter-rouge">OSLicense</code> module in PowerShell.</p>

<p>The mapping is pretty clean for the most common actions:</p>

<table>
  <thead>
    <tr>
      <th>Task</th>
      <th>Legacy command</th>
      <th>PowerShell replacement</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Activate Windows</td>
      <td><code class="language-plaintext highlighter-rouge">slmgr.vbs /ato</code></td>
      <td><code class="language-plaintext highlighter-rouge">Invoke-OSLicense -ActivateOnline</code></td>
    </tr>
    <tr>
      <td>Install a product key</td>
      <td><code class="language-plaintext highlighter-rouge">slmgr.vbs /ipk &lt;key&gt;</code></td>
      <td><code class="language-plaintext highlighter-rouge">Invoke-OSLicense -InstallProductKey &lt;key&gt;</code></td>
    </tr>
    <tr>
      <td>View activation details</td>
      <td><code class="language-plaintext highlighter-rouge">slmgr.vbs /dlv</code></td>
      <td><code class="language-plaintext highlighter-rouge">Get-OSLicenseInfo</code></td>
    </tr>
  </tbody>
</table>

<p>This gives you a supported path without relying on a deprecated scripting host.</p>

<h3 id="example">Example</h3>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Activate Windows online</span><span class="w">
</span><span class="n">Invoke-OSLicense</span><span class="w"> </span><span class="nt">-ActivateOnline</span><span class="w">

</span><span class="c"># Install product key</span><span class="w">
</span><span class="n">Invoke-OSLicense</span><span class="w"> </span><span class="nt">-InstallProductKey</span><span class="w"> </span><span class="s2">"FCKGW-RHQQ2-YXRKT-8TG6W-2B7Q8"</span><span class="w">

</span><span class="c"># Review license status</span><span class="w">
</span><span class="n">Get-OSLicenseInfo</span><span class="w">
</span></code></pre></div></div>

<h2 id="check-support-before-you-migrate">Check support before you migrate</h2>

<p>Before rolling this out broadly, confirm the target device supports the <code class="language-plaintext highlighter-rouge">OSLicense</code> module. Install the latest September 2026 patch, to make sure it’s supported (Look for builds 26100.9278, 26200.9278 or higher)</p>

<ul>
  <li>Windows 11: requires the appropriate servicing update, such as the August 27, 2026 Preview (KB5120998) or later</li>
  <li>Windows Server: availability is planned for the next major Windows Server release, with previews available for early validation in some builds</li>
</ul>

<p>Inventory your scripts, confirm the supported Windows builds in your estate, and test the new scripts before rolling out broadly.</p>

<h2 id="what-to-look-for-in-your-environment">What to look for in your environment</h2>

<p>A lot of activation automation hides in plain sight.</p>

<p>Search for these references:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">slmgr.vbs</code></li>
  <li><code class="language-plaintext highlighter-rouge">cscript</code></li>
  <li><code class="language-plaintext highlighter-rouge">wscript</code></li>
  <li><code class="language-plaintext highlighter-rouge">.vbs</code> files</li>
  <li>runbooks or task sequences that call activation commands</li>
  <li>custom scripts that parse activation output or use legacy VBScript wrappers</li>
</ul>

<p>This type of dependency often exists in:</p>

<ul>
  <li>Intune device remediation logic</li>
  <li>helpdesk or service desk automation</li>
  <li>software distribution workflows</li>
  <li>provisioning and post-provisioning tasks</li>
  <li>MDT and SCCM in general (Yes… big time)</li>
</ul>

<p>If you use Microsoft Defender for Endpoint, you can use this advanced hunting rule to audit VBScript usage</p>

<pre><code class="language-KQL">/ VBScript usage - script host execution and .vbs/.vbe file activity
// Timeframe: last 30 days
let lookback = 30d;
DeviceProcessEvents
| where Timestamp &gt; ago(lookback)
| where FileName in~ ("wscript.exe", "cscript.exe")
| where ProcessCommandLine has_any (".vbs", ".vbe")
    or ProcessCommandLine contains "//E:vbscript"
| project Timestamp, DeviceName, AccountName,
    FileName, ProcessCommandLine,
    InitiatingProcessFileName, InitiatingProcessCommandLine,
    FolderPath
| sort by Timestamp desc
</code></pre>

<h2 id="final-takeaway">Final takeaway</h2>

<p>For activation automation, the replacement path is already available in PowerShell for your Windows 11 clients, as long as your devices is running the latest OS Build from September 2026 or onwards (Nobody rolls out preview patches anyway..).</p>

<p>If you still have some device activation automation based on VBScript in your environment, now is the time to test the <code class="language-plaintext highlighter-rouge">OSLicense</code> module and migrate it before VBScript support will be removed.</p>

<p>For the full Microsoft guidance in regards to VBScript deprecation, see the following links:</p>

<ul>
  <li><a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/keep-windows-activation-automation-working-with-powershell/4540459">Keep Windows activation automation working with PowerShell</a></li>
  <li><a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/vbscript-deprecation-detection-strategies-for-windows/4414325">VBScript deprecation: Detection strategies for Windows - Windows IT Pro Blog</a></li>
  <li><a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/vbscript-deprecation-timelines-and-next-steps/4148301">VBScript deprecation: Timelines and next steps</a></li>
  <li><a href="https://learn.microsoft.com/powershell/module/oslicense">OSLicense PowerShell reference</a></li>
</ul>]]></content><author><name>Mads Johansen</name></author><category term="Windows" /><category term="Intune" /><category term="VBScript" /><category term="PowerShell" /><category term="Activation" /><category term="slmgr" /><category term="Windows 11" /><summary type="html"><![CDATA[If your organization still uses slmgr.vbs to activate Windows, check product keys, or read licensing status, you should start planning the change now.]]></summary></entry><entry><title type="html">Unattended Access for Remote Help is finally here</title><link href="https://evil365.com/intune/RemoteHelp-UnattendedAccess/" rel="alternate" type="text/html" title="Unattended Access for Remote Help is finally here" /><published>2026-08-25T00:00:00+00:00</published><updated>2026-08-25T00:00:00+00:00</updated><id>https://evil365.com/intune/RemoteHelp-UnattendedAccess</id><content type="html" xml:base="https://evil365.com/intune/RemoteHelp-UnattendedAccess/"><![CDATA[<p>It’s been long underway: Unattended access for Remote Help is finally here. You can read the announcement from Microsoft <a href="https://techcommunity.microsoft.com/blog/IntuneCustomerSuccess/remote-help-on-windows-unattended-support-with-remote-sign-in-is-here/4549772">here</a></p>

<p>I’ve been sitting on this for a while, since we have been talking at great length with the product group about this some time ago. Since the cat is finally out of the bag, let’s dive into it.</p>

<p><img src="/assets/images/2026-08-25-RemoteHelp-UnattendedAccess/RemoteHelp-1.png?raw=true" alt="Thumbnail" title="Thumbnail" /></p>

<h2 id="remote-help-unattended-access">Remote Help Unattended Access</h2>

<p>Microsoft has released Unattended access for Remote Help, but if you ask me, it’s with a twist. It’s not as “Unattended” as you might come to believe. The functionality released is more like a Cloud RDP functionality. When the IT Admin initiates an unattended access session, it will kick the other user off as shown in the screenshot above.</p>

<p>In other words: What is referred to in some circles as “Session Shadowing” is not supported, and last time we spoke to the product group, this will never be supported. Specifically, this means the following scenarios cannot be supported:</p>

<ul>
  <li>Common Kiosk Scenarios where there is no primary user but an application is running in the current user context</li>
  <li>Information screens or similar</li>
  <li>Factory areas w. Autologon scenarios</li>
</ul>

<p>The key thing here is probably the autologon scenarios. A lot of companies still rely on this functionality. And while I can understand from a security perspective why Microsoft has decided not to support this scenario, it’s still a bit disappointing to see that they at least don’t want to hand over that control to the IT Admins, i.e: Give us a toggle to enable “Complete unattended” or “Session Shadowing” but only on select devices, using a policy or similar.</p>

<h2 id="wrapping-up">Wrapping up</h2>

<p>This was just a short blog post to inform you all about this. A lot of my customers have been waiting patiently for this feature to release, since it’s been on the roadmap for so long. But of course, now that the cat is out of the bag, if you still need Session Shadowing in your remote support product, I guess you need to hang on to your TeamViewer or whatever you are using today for now.</p>

<p>P.S: I’m going to give <a href="https://evil365.com/intune/IntelvProPortal-Intune-Integration/">this old blog post about Intel vPro some love very soon</a>. This feature is so overlooked. Unattended access in Intel vPro is already released, amongst lots of other features.</p>

<p>That’s all… have a nice day :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Intune" /><category term="Remote Help" /><category term="Intune Suite" /><category term="Unattended Access" /><summary type="html"><![CDATA[It’s been long underway: Unattended access for Remote Help is finally here. You can read the announcement from Microsoft here]]></summary></entry><entry><title type="html">August Update: Upcoming Speaking Engagements and Other Stuff</title><link href="https://evil365.com/blogthings/August2026-Update/" rel="alternate" type="text/html" title="August Update: Upcoming Speaking Engagements and Other Stuff" /><published>2026-08-16T00:00:00+00:00</published><updated>2026-08-16T00:00:00+00:00</updated><id>https://evil365.com/blogthings/August2026-Update</id><content type="html" xml:base="https://evil365.com/blogthings/August2026-Update/"><![CDATA[<p>I’m thrilled to let you all know I’ve been booked for 2 major speaking engagements in October this year.</p>

<ul>
  <li>5-6 October 2026: <a href="https://expertslive.sa/">Experts Live Saudi Arabia</a>, where I will be delivering an EPM session.</li>
  <li>13-15 October 2026: <a href="https://nicconf.com/">NIC26 Oslo</a>, where I will be delivering an Intune Suite session.</li>
</ul>

<p>When I started blogging more than 2 years ago, my initial goal was always to provide content through blogging - simple, to the point, with no fuss. But I’ve always had a dream of breaking out as a speaker on the big stages. I love presenting, I love being on stage, and I find it relaxing in a strange way, like it’s where I’m supposed to be. Delivering that awesome session that leaves people with something genuinely useful they can take back and use in their environment straight away, but with a few funny comments or remarks along the way to keep people engaged and attentive.</p>

<p>This year, things are definitely starting to kick off for me. I’ve already had several speaking engagements, and I’m starting to feel that I’m slowly becoming an established contributor in the endpoint management community, even though I’m not an MVP (yet - we will see :))</p>

<p>I’m incredibly grateful to everyone who took a chance on me in my early days by accepting my session submissions, even though they didn’t know who I was. I’m not going to lie, it’s been rough at times, with so many rejections over the years. It’s super difficult to break onto the major stage, especially when you don’t hold MVP status, because people don’t really know you that well. And of course, if you’re the organizer of a major event - especially one where people have to pay to get in - you pick the most established speakers.</p>

<h2 id="so-what-is-the-future-of-this-blog-if-im-going-to-spend-more-time-on-speaking-engagements">So what is the future of this blog, if I’m going to spend more time on speaking engagements?</h2>

<p>I’m going to continue blogging, of course. I just need to strike a new balance between helping my customers whilst also blogging and speaking on the side. I still enjoy blogging, don’t get me wrong, but in super busy times I find myself with a lot of drafts and no blog posts, as my days can become quite chaotic at times. So in the future, I will try and structure my days a bit better so I have dedicated time for blogging every other week or so.</p>

<p>That’s all for now, and I hope to see you out there :)</p>]]></content><author><name>Mads Johansen</name></author><category term="BlogThings" /><category term="Blog" /><summary type="html"><![CDATA[I’m thrilled to let you all know I’ve been booked for 2 major speaking engagements in October this year.]]></summary></entry><entry><title type="html">Admin control for SSO prompts in Windows</title><link href="https://evil365.com/intune/Microsoft-EU-SSOHassle/" rel="alternate" type="text/html" title="Admin control for SSO prompts in Windows" /><published>2026-07-18T00:00:00+00:00</published><updated>2026-07-18T00:00:00+00:00</updated><id>https://evil365.com/intune/Microsoft-EU-SSOHassle</id><content type="html" xml:base="https://evil365.com/intune/Microsoft-EU-SSOHassle/"><![CDATA[<p>Back in 2024, Microsoft rolled out a prompt that asks end-users to confirm authentication via SSO. You can read more about that <a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/upcoming-changes-to-windows-single-sign-on/4008151">here</a>.</p>

<p>This change was made so Microsoft would be compliant with the EU’s Digital Markets Act (DMA). If a device’s region is set to an EU country, chances are you have been getting these additional SSO prompts ever since. Most of you reading this who have seen them probably find them rather annoying. It wasn’t really SSO anymore, more like MSO (Multiple-Sign On)? Ok, I just made that up right now, but you get what I mean.</p>

<p><img src="/assets/images/2026-07-18-Microsoft-EU-SSOHassle/Original-SSO-Prompt.png?raw=true" alt="Screenshot of original SSO prompt" title="The original SSO prompt" /></p>

<p>I can’t count the number of support tickets I logged on behalf of my customers back in 2024, mainly for shared-device scenarios. It was a bit of a mess. Some of it got fixed, but other scenarios were just “working as designed”.</p>

<p>Some 2½ years later, enterprise administrators finally get a policy option to suppress the SSO prompt. To quote the Microsoft docs:</p>

<blockquote class="notice--info">
  <p>“For managed enterprise environments, some organizations wanted additional flexibility to manage the SSO prompt experience on devices where their organizations already manage sign-in policies and trust relationships. To support those scenarios, we’ve developed a registry-based control that lets IT administrators automatically accept SSO permissions on eligible managed Windows devices.”</p>

  <p><a href="https://learn.microsoft.com/en-us/entra/identity/devices/sso-admin-control">Source: Microsoft Learn</a></p>
</blockquote>

<h2 id="policy-to-suppress-the-sso-prompt">Policy to suppress the SSO prompt</h2>

<p>Microsoft recently published a blog post about the new policy option that allows you to suppress the SSO prompt. You can read it <a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/now-available-admin-control-for-sso-prompts-in-windows/4534613">here</a>.</p>

<p>The short version:</p>

<ul>
  <li>Starting with the July 2026 patch for Windows 11 24H2 and 25H2, we can now suppress the SSO prompt</li>
  <li>It can be deployed via GPO or as a registry key using a PowerShell script:</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Registry path: HKLM\SOFTWARE\Policies\Microsoft\Windows\AAD
Value: AutoAcceptSsoPermission (DWORD) = 1
</code></pre></div></div>

<blockquote class="notice--warning">
  <p>There is currently no Intune Settings Catalog option to set this policy as of this date - I previously mentioned a settings catalog option, but it turned out it was an incorrect policy space that was not related. See the official docs for this setting <a href="https://learn.microsoft.com/en-us/entra/identity/devices/sso-admin-control#enterprise-admin-control-for-sign-in-behavior">here</a> - You can also find a remediation to set it using Intune from <a href="https://github.com/thisisevilevil/IntunePublic/tree/main/Remediations/AutoAcceptSSOpermission">my Intune github repo</a>.</p>
</blockquote>

<h2 id="wrapping-up">Wrapping up</h2>

<p>These SSO prompts have certainly been an annoyance over the years, and they seemed so redundant. Microsoft also received a fair bit of slack when they started rolling it out, but what a lot of people seemed to miss back then was that this was a necessary step for Microsoft to become compliant with EU guidelines.</p>

<p>It’s nice that we finally have an option to suppress it in enterprise environments, and I guess this will be one of those “core” policies that ends up deployed in most environments.</p>

<p>That’s all for now, have a great day :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Intune" /><category term="SSO" /><category term="Single-Sign On" /><category term="DMA" /><category term="Digital Market Acts" /><category term="Microsoft 365" /><summary type="html"><![CDATA[Back in 2024, Microsoft rolled out a prompt that asks end-users to confirm authentication via SSO. You can read more about that here.]]></summary></entry><entry><title type="html">Using Autopatch’s ring system for your own benefit</title><link href="https://evil365.com/intune/UsingAutopatch-RingSystem/" rel="alternate" type="text/html" title="Using Autopatch’s ring system for your own benefit" /><published>2026-06-07T00:00:00+00:00</published><updated>2026-06-07T00:00:00+00:00</updated><id>https://evil365.com/intune/UsingAutopatch-RingSystem</id><content type="html" xml:base="https://evil365.com/intune/UsingAutopatch-RingSystem/"><![CDATA[<p>Here is one of those consultant secrets: when we make changes, we do not YOLO-roll out an app, policy, or script to every device at once. We also do not want a static Entra group manually maintained by one person, where half the devices are stale anyway. When Autopatch launched, I quickly noticed its ring system. You can create multiple rings and let Autopatch distribute devices dynamically based on percentages you define as IT admin.</p>

<p>Did you know Autopatch creates those defined rings as static Entra groups? It then handles dynamic assignment when devices are registered.</p>

<p>But let’s back up a bit. What is Autopatch in the first place?</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Thumbnail.png?raw=true" alt="Thumbnail" title="Thumbnail" /></p>

<h2 id="what-is-windows-autopatch">What is Windows Autopatch</h2>

<p>Windows Autopatch is Microsoft’s managed update service. It takes most patching overhead off IT teams. It is cloud-based and automates updates for Windows and other Microsoft software such as Edge, Microsoft Office, and anything supported by the Windows Update engine.</p>

<p>When Autopatch is enabled in your tenant and you create new “Autopatch groups,” it automatically creates the relevant policies for Windows patching, feature updates, Edge, Office, and more. That saves IT admins from a manual click-a-thon.</p>

<p>I still meet a lot of customers who are skeptical of Autopatch. What many people miss is that WUfB (Windows Update for Business) was merged into Autopatch a while back. If you spend a lot of time in the Intune admin console, you have probably noticed things moved around. That is mostly due to Autopatch maturing over the past few years.</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/September2024-Autopatch-Unification.png?raw=true" alt="Announcement" title="September2024 WufB Unification" /></p>

<h2 id="getting-started-with-autopatch">Getting started with Autopatch</h2>

<p>To start configuring Autopatch, you need an Entra group for device onboarding. This can be static or dynamic. Also be sure to review the <a href="https://learn.microsoft.com/en-us/windows/deployment/windows-autopatch/prepare/windows-autopatch-prerequisites?source=recommendations">pre-reqs for Autopatch in the documentation.</a>
 Navigate to Tenant Administration &gt; Autopatch groups and click “Create” to start creating your autopatch group.
<img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Autopatch-1.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<p>Give it a nice name and click Next.</p>
<blockquote class="notice--info">
  <p>The name you give your Autopatch group will be appended to all of the auto-generated policies and Entra groups.</p>
</blockquote>
<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Autopatch-2.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<p>Now for the important bits. First, add the Entra group that will onboard devices into your Autopatch setup. I recommend a dynamic group so you do not have to maintain it manually.</p>

<blockquote class="notice--warning">
  <p>I recommend against using cloud-synced groups from SCCM collections where possible. Try to work within the parameters of Entra dynamic groups to keep your setup simple. SCCM cloud sync makes things unnecessarily complicated and slow.</p>
</blockquote>

<p>Click “Add Deployment ring” for each ring you want. Five rings is a good starting point. Then adjust each ring percentage to control how many devices land in each ring. In my screenshot, the split is 5%, 15%, 20%, 30%, and 30%. That gives a balanced distribution in later rings while keeping enough volume early to catch noise sooner.</p>

<p>Once you are happy, click Next.</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Autopatch-3.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<blockquote class="notice--info">
  <p>The Test and Last rings are not populated automatically. An IT admin must populate them manually through the “Autopatch group membership” blade in Intune. The Test ring is commonly used by device team personnel to validate changes before Ring 1. Ring Last can be used for devices that need a longer deadline or grace period before reboot enforcement.</p>
</blockquote>

<p>In the update types section, I recommend disabling feature updates. If you enable them here, Autopatch creates a “feature update anchor policy.” That is an “Immediate Start” policy for the selected version, which can force immediate updates on devices that are not already up-to-date based on the version you specify in the autopatch policy. To control feature updates properly, use the Autopatch <a href="https://learn.microsoft.com/en-us/windows/deployment/windows-autopatch/manage/windows-autopatch-windows-feature-update-overview#multi-phase-feature-update">multi-phase feature update rollout</a>.</p>

<p>Also, do not select Driver Updates if you are already managing driver updates with the OEM’s own solution, i.e., Dell Command | Update, HPIA, or Lenovo System Update.</p>

<blockquote class="notice--info">
  <p>If you do decide to enable driver updates, keep in mind that Deadline and Grace Periods also apply to driver updates released via Autopatch, and is shared jointly with the quality updates.</p>
</blockquote>

<p>Click Next again.</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Autopatch-4.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<p>In the next blade, you can choose which rings get Edge Beta and Edge Stable. Edge Beta for Ring Test is the default. Just be prepared for occasional browser weirdness, since you will receive features before the masses.</p>

<p>Click Next again.</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Autopatch-5.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<p>In the next section, you set timing for when quality updates are delivered to each ring. Before changing anything, make sure you understand these concepts:</p>

<table>
  <thead>
    <tr>
      <th>Setting</th>
      <th>What it controls</th>
      <th>Example</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Client Deferrals</strong></td>
      <td>Number of days after a cumulative update release before it is offered to the device.</td>
      <td>Set to <code class="language-plaintext highlighter-rouge">10</code>: Autopatch waits 10 days before offering the update.</td>
    </tr>
    <tr>
      <td><strong>Deadline</strong></td>
      <td>Number of days before the update must be installed.</td>
      <td>Set to <code class="language-plaintext highlighter-rouge">3</code>: the device can wait up to 3 days before automatic install.</td>
    </tr>
    <tr>
      <td><strong>Grace</strong></td>
      <td>Minimum number of days after an update is installed and the device enters a pending-restart state before a restart is forced automatically. The countdown starts at pending restart, not at release — so a device that’s powered off (e.g. on vacation) only begins its grace countdown once it’s back online and the update has installed. Users receive increasingly prominent restart notifications during this window.</td>
      <td>Set to <code class="language-plaintext highlighter-rouge">3</code>: after the update installs and a restart is pending, the user has 3 days to reboot on their own terms before Windows forces it.</td>
    </tr>
  </tbody>
</table>

<p>Tuning these timers to your risk profile is extremely important. If you work in defense, security, or similar sectors, keep values as low as possible. Still leave enough room in later rings to absorb noise found early. Defaults are fine for many organizations, but if possible, lower deferral and raise grace. Many users reboot early anyway. That approach gives users flexibility while reducing exposure time. As always, there are trade-offs.</p>

<p>When you are done, click Next. Apply any scope tags if relevant, and then click Next and Finish.</p>

<h2 id="using-autopatch-rings-for-your-own-benefit">Using Autopatch rings for your own benefit</h2>

<p>Once set up, Autopatch starts registering devices from the Entra group you assigned. Almost immediately after creating the Autopatch group, you will see Entra groups for each ring.</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Autopatch-6.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<p>That is super valuable when you need to roll out a new policy, app, script, and so on. You can reuse those same rings for your own deployments.</p>

<blockquote class="notice--info">
  <p>If you create multiple Autopatch groups, they are consolidated under these groups: Modern Workplace Devices-Windows Autopatch-Test, Modern Workplace Devices-Windows Autopatch-First, Modern Workplace Devices-Windows Autopatch-Fast, and Modern Workplace Devices-Windows Autopatch-Broad. You can use these too, but the device split can be uneven between First and Fast.</p>
</blockquote>

<h2 id="manually-changing-devices-to-different-rings">Manually changing devices to different rings</h2>

<p>Once devices start registering, Autopatch will distribute them dynamically based on the percentages you configured. If you want to move specific devices, for example into Ring Test, Fast, or any other ring, go to Tenant Administration &gt; Autopatch Groups &gt; Autopatch Group Memberships.</p>

<p>Search for the device, select it, click “Assign ring,” and choose the ring you want it in.
<img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Ring-1.png?raw=true" alt="Autopatch" title="Getting started with autopatch" />
<img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/Ring-2.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<p>The Autopatch Group Memberships blade is also where you can exclude devices from Autopatch. You can also review “Not registered” devices, which shows devices that failed registration. Common reasons include unmet prerequisites such as “Windows update workload not swung over” or “Devices must be managed by Intune or Co-mgmt.”</p>

<h2 id="the-end">The end</h2>

<p>Remember to also build a multi-phase feature update rollout for your target version. It is straightforward and works well in phases.</p>

<p><img src="/assets/images/2026-06-06-AbusingAutopatch-RingSystem/MultiPhase.png?raw=true" alt="Autopatch" title="Getting started with autopatch" /></p>

<blockquote class="notice--info">
  <p>Final word of advice: factor in delivery timing when testing policies, apps, or other major changes against Autopatch rings. After Autopilot enrollment, a device may take 10-30 minutes to register with Autopatch, depending on your environment. So if you are testing something that normally lands during ESP, targeting Autopatch rings will not fully test the new-device deployment scenario.</p>
</blockquote>

<p>That’s all for now. Hope you found it useful. Have an awesome day :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Intune" /><category term="Autopatch" /><category term="Windows Autopatch" /><category term="Windows Patching" /><category term="Staggered rollout" /><category term="ring rollout" /><summary type="html"><![CDATA[Here is one of those consultant secrets: when we make changes, we do not YOLO-roll out an app, policy, or script to every device at once. We also do not want a static Entra group manually maintained by one person, where half the devices are stale anyway. When Autopatch launched, I quickly noticed its ring system. You can create multiple rings and let Autopatch distribute devices dynamically based on percentages you define as IT admin.]]></summary></entry><entry><title type="html">The YellowKey debacle</title><link href="https://evil365.com/intune/Yellowkey-Debacle/" rel="alternate" type="text/html" title="The YellowKey debacle" /><published>2026-05-29T00:00:00+00:00</published><updated>2026-05-29T00:00:00+00:00</updated><id>https://evil365.com/intune/Yellowkey-Debacle</id><content type="html" xml:base="https://evil365.com/intune/Yellowkey-Debacle/"><![CDATA[<p><strong>UPDATE 22nd of June 2026: The yellowkey vulnerability has been resolved in the June 2026 patch. The remediation shared in this blog post is no longer needed. <a href="https://www.bleepingcomputer.com/news/microsoft/microsoft-patches-yellowkey-greenplasma-miniplasma-zero-days/">Source</a></strong></p>

<p>It’s been almost 2 months since the individual known as “Nightmare-Eclipse” (aka “Chaotic Eclipse”) released 6 zero-day exploits, and I’ve been closely monitoring the debacle as it unfolds. On one side you have a disgruntled security researcher who firmly believes Microsoft has wronged him, and on the other you have Microsoft taking a no-BS approach, saying normal protocol wasn’t followed and that making the source code for all of these exploits publicly available was ruthless and irresponsible. They even went so far as to ban the GitHub repo where all of the source code was initially hosted.</p>

<p>You can read more about the details <a href="https://blog.barracuda.com/2026/05/19/nightmare-eclipse-zero-days-grudge">here</a> - the events are still unfolding, and I don’t think we’ve seen the last of it yet. Microsoft released a blog post 2 days ago (as of today’s date) in which they clearly distance themselves from the kerfuffle, and according to them the security researcher is 100% to blame. You can read Microsoft’s response <a href="https://www.microsoft.com/en-us/msrc/blog/2026/05/a-shared-responsibility-protecting-customers-through-coordinated-vulnerability-disclosure">here</a>.</p>

<p>Be that as it may, what about the BitLocker exploit dubbed “Yellowkey”?</p>

<h2 id="what-is-the-yellowkey-exploit">What is the YellowKey exploit</h2>

<p>The YellowKey exploit is a BitLocker bypass attack that allows an attacker with physical access to a device to gain access to the data on a hard drive, even though it’s encrypted with BitLocker. Mechanically, it involves placing specially crafted ‘FsTx’ files on a USB drive or EFI partition, rebooting into WinRE, and triggering a shell by holding down the CTRL key. It bypasses TPM-only BitLocker in particular, and the critical constraint is physical access — it cannot be abused remotely.</p>

<p>So it’s not great — in fact, I’d go so far as to say it’s pretty bad. One of the main features of BitLocker is data-theft protection in case a device gets stolen.</p>

<p>It’s worth noting that this vulnerability only affects Windows 11 24H2 and higher. It does not affect earlier versions of Windows 11 or Windows 10 — Windows 10 is in the clear due to differences in how it configures WinRE.</p>

<p class="notice--warning"><strong>Don’t forget your servers:</strong> the client side isn’t the whole story. Microsoft’s <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-45585">MSRC advisory</a> lists the canonical affected products as Windows 11 24H2, 25H2 and 26H1 (x64), <strong>plus Windows Server 2025, including Server Core</strong>. Windows Server 2022 was thrown around as affected when the PoC first dropped, but it’s not in Microsoft’s official scope, so treat that as unconfirmed.</p>

<p>So what can we do about it?</p>

<h2 id="mitigation-using-intune">Mitigation using Intune</h2>

<p>Microsoft has released a PowerShell script as an interim fix that mitigates the attack until an official patch is released through normal channels. You can find it in their security update report for this incident <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-45585">here</a>. The fix is relatively simple: mount the WinRE partition and remove the Autofstx.exe executable.</p>

<p>The PowerShell script can be deployed through Intune as a platform script, but there is no detection or logging mechanism, so if it fails you won’t know why. I recommend heading over to James Vincent’s blog post about this and grabbing his remediation scripts instead. You can find his blog post <a href="https://jamesvincent.co.uk/2026/05/21/mitigate-yellowkey-exploit-cve-2026-45585-using-intune/">here</a>.</p>

<p>Download both the <a href="https://github.com/jamesvincent/Intune/blob/main/CVE-2026-45585/Detect-CVE-2026-45585.ps1">detection</a> and the <a href="https://github.com/jamesvincent/Intune/blob/main/CVE-2026-45585/Remediate-CVE-2026-45585.ps1">remediation</a> script.
<img src="/assets/images/2026-05-26-Yellowkey-Debacle/Github-Scripts.png?raw=true" alt="Scripts" title="Github Scripts" /></p>

<p class="notice--info"><strong>Logging:</strong> Both the detection and remediation scripts log to the IntuneManagementExtension folder under <code class="language-plaintext highlighter-rouge">C:\ProgramData\Microsoft\IntuneManagementExtension\Logs</code>, so you’ll have something to check if a run fails.</p>

<p>Once downloaded, I also recommend you create a new device filter in Intune so you can target devices running Windows 11 24H2 or Windows 11 25H2. In Intune, navigate to Devices &gt; Assignment Filters and create a new filter. Set the property to “osVersion”, the operator to “starts with”, and the value to “10.0.26100”, then add an “or” rule with a second “osVersion” / “starts with” / “10.0.26200”. It should end up looking like this: <code class="language-plaintext highlighter-rouge">(device.osVersion -startsWith "10.0.26100") or (device.osVersion -startsWith "10.0.26200")</code>
<img src="/assets/images/2026-05-26-Yellowkey-Debacle/DeviceFilterExample.png?raw=true" alt="Scripts" title="Device Filter" /></p>

<p>Now head over to Intune &gt; Scripts and Remediations and click “Create”. Give it a nice name, e.g. “YellowKey mitigation”. Then add both the detection and the remediation script. Make sure to set “Run script in 64-bit PowerShell” to “Yes”. Click Next, apply scope tags if required, then hit Next again. Now for the important bit: I recommend you assign it to a few devices to test first, before starting the broad rollout. If you are already using Autopatch, you will already have these rings — just search for “Autopatch” and you should find the corresponding Autopatch Entra groups matching your rings.
<img src="/assets/images/2026-05-26-Yellowkey-Debacle/Remediation-1.png?raw=true" alt="Scripts" title="Remediation" /></p>

<p>Adjust the “Schedule” so it only runs every 7 days or similar. There is no reason to have it run daily. Then make sure to apply the Windows 11 24H2 or higher filter you created earlier.
<img src="/assets/images/2026-05-26-Yellowkey-Debacle/Remediation-2.png?raw=true" alt="Scripts" title="Remediation" /></p>

<p>You are now ready to start deploying to a test and an early ring. Once you are happy with the results, you can gradually continue the rollout by adding your remaining rings. Alternatively, if you don’t really care about testing and just want to deploy the mitigation to everyone immediately, you can deploy to “All Devices” with the Windows 11 24H2 or higher filter.</p>

<h2 id="thats-it-for-now">That’s it for now</h2>

<p>I hope you found it useful.</p>

<p class="notice--warning"><strong>Remember:</strong> only deploy to Windows 11 24H2 or higher (and Server 2025), or you’ll most likely see an error when trying to remediate, such as <code class="language-plaintext highlighter-rouge">REAGENTC.EXE: Operation failed: c142011c</code> / <code class="language-plaintext highlighter-rouge">REAGENTC.EXE: An error has occurred.</code></p>

<p>I’ve used this approach at two customers already with great results. We got a few errors in the beginning because we forgot to add the device filter, so Windows 10 and earlier versions of Windows 11 devices were targeted as well.
<img src="/assets/images/2026-05-26-Yellowkey-Debacle/Remediation-Results.png?raw=true" alt="Scripts" title="Remediation" /></p>

<p>Have an awesome day ahead :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Intune" /><category term="YellowKey mitigation" /><category term="YellowKey vulnerability" /><category term="BitLocker vulnerability" /><category term="Remediation" /><summary type="html"><![CDATA[UPDATE 22nd of June 2026: The yellowkey vulnerability has been resolved in the June 2026 patch. The remediation shared in this blog post is no longer needed. Source]]></summary></entry><entry><title type="html">Multi-Admin Approval in Intune: What It Does (and Doesn’t) Protect Against</title><link href="https://evil365.com/intune/MultiAdmin-Approval/" rel="alternate" type="text/html" title="Multi-Admin Approval in Intune: What It Does (and Doesn’t) Protect Against" /><published>2026-04-07T00:00:00+00:00</published><updated>2026-04-07T00:00:00+00:00</updated><id>https://evil365.com/intune/MultiAdmin-Approval</id><content type="html" xml:base="https://evil365.com/intune/MultiAdmin-Approval/"><![CDATA[<p>Recently there was a major hack: the Stryker incident. You can read more about it <a href="https://www.stryker.com/us/en/about/news/2026/a-message-to-our-customers-03-2026.html">here</a>.</p>

<p>The TL;DR version:</p>

<ul>
  <li>Mass-wipe commands were sent using Microsoft Intune to all Windows-based devices</li>
  <li>Servers were also impacted - But not using Intune</li>
  <li>In total, around 200,000 devices, including servers, laptops, desktops and mobile devices were affected</li>
</ul>

<p>A compromised admin account (presumably a Global Admin, but we don’t know yet) was the culprit. Over the past several years, there’s been a strong push for reducing the amount of Global Admins, Conditional access policies and phish-resistant MFA for these accounts. Hell, phish-resistant MFA should be implemented for everyone, but Global Admins should definitely be the first in line.</p>

<p>One thing I noticed during the week the incident unfolded, was a seemingly knee-jerk reaction to enable MAA because that would prevent incidents like these. But would it? Let’s find out.</p>

<h2 id="multi-admin-approval-overview">Multi-Admin Approval overview</h2>

<p>Multi-Admin Approval (MAA) is a relatively new feature from Microsoft Intune that adds an extra approval layer for high-impact actions such as Device Wipe and Device Delete. Microsoft is also adding more device actions and policy types, for now it supports a few different policy types, such as modifying applications, running scripts or modifying a role. But the majority will probably look at enabling MAA for the following device actions: <strong>Delete</strong>, <strong>Retire</strong> and <strong>Wipe</strong></p>

<p>When you create any of these MAA policy types, it is a <strong>tenant-wide policy</strong>. Scope tags are not supported, and scoping a MAA-Policy only to certain devices or users is also not supported for now. When you create the MAA policy, you will need to assign an EntraID Group of who can approve requests and then it will need to be approved by another admin before the policy actually is in effect. Note that even Global Admins cannot approve their own MAA requests.
Once the request is approved by another admin, you will have to navigate back to the MAA Pane in Intune and finally click “Complete request”. The approach is the same for the other MAA actions, let’s break it down.</p>

<p><img src="/assets/images/2026-04-07-MAA/CreateNewPolicy-1.png?raw=true" alt="MAAPolicy" title="MAAPolicy Creation" />
<img src="/assets/images/2026-04-07-MAA/CreateNewPolicy-2.png?raw=true" alt="MAAPolicy" title="MAAPolicy Creation" />
<img src="/assets/images/2026-04-07-MAA/CreateNewPolicy-3.png?raw=true" alt="MAAPolicy" title="MAAPolicy Creation" />
<img src="/assets/images/2026-04-07-MAA/CreateNewPolicy-4.png?raw=true" alt="MAAPolicy" title="MAAPolicy Creation" /></p>

<h3 id="how-it-works-in-practice">How it works in practice</h3>

<p>Let’s run through a scenario where an admin wants to delete a device. In this example we will have 2 admins. <strong>Admin 1 is Bob</strong> and <strong>Admin 2 is Rachel</strong>.</p>

<ol>
  <li>Bob initiates a device wipe towards a device from Intune. Since there is an MAA-Policy deployed, it will need to be approved by a 2nd admin, and Bob will need to provide a justification included in the request.</li>
  <li>Rachel approves the request from the MAA Requests pane in Intune. Rachel also needs to provide an approval reason.</li>
  <li>Bob then has to go to the same Multi-Admin Approval pane, click his request, and finally hit the “Complete request” button to actually initiate that wipe. Bob will have to do this within 3 days after the approval was given, otherwise it will expire.</li>
</ol>

<p>If the action expires before clicking “complete request”, Bob will have to initiate a new wipe request and get it approved again.</p>

<p>It’s important to underline that the action doesn’t automatically complete once it’s approved, the requesting admin will have to go to click that “Complete request” button to finalize the action, so essentially a 3-step process. There is also no built-in notification system, so admins are not currently notified in any way when an approval request is sent to the portal or when a request is approved. It is possible to create your own notification tooling, e.g., Power Automate or an Azure Logic App to send notifications via email or to a Teams channel.</p>

<blockquote>
  <p>NOTE: Based on learnings from the field, I’ve found it can take between 15-30 minutes for MAA to actually process the request. Example: If you press “complete request” to delete or wipe a device, it doesn’t immediately process.</p>
</blockquote>

<h2 id="what-it-protects-against">What it protects against</h2>

<p>I want to be clear: this does NOT protect against a compromised Global Administrator (GA) account. In various posts I found on LinkedIn and Reddit, it was frequently misconstrued that by simply implementing MAA, you were protected against these mass-wipe attacks, but this is not the case if the compromised account is a GA. When you obtain GA you have full administrative rights in the tenant. The GA will be able to simply delete the MAA policy or create separate admin accounts to approve their own MAA requests. Alternatively, an overprivileged app registration can also tamper with these settings, which is an additional blind spot that many companies are unaware of.</p>

<p>However, and to be clear, MAA does protect against the following:</p>

<ul>
  <li>Accidental device wipe/deletion</li>
  <li>The disgruntled employee scenario: On their last day at work, the individual could initiate mass-wipes before heading out the door.</li>
  <li>Singular compromised Intune Administrator or similar (Think Custom RBAC Roles in Intune)</li>
</ul>

<h2 id="a-few-gotchas">A few gotchas</h2>

<ol>
  <li>MAA does not protect against a Compromised GA Account</li>
  <li>If you are using 3rd party or custom-written tools to process intune device deletions or wipes, they will most likely stop working after implementing an MAA policy, e.g., a custom-written PowerShell script or tools like IntuneOffboarding.</li>
  <li>When deleting devices using a script, you need to put a justification for the deletion request in the header when using Remove-MgDeviceManagementManagedDevice or use one of the new Graph cmdlets for managing approval requests (<a href="https://learn.microsoft.com/en-us/graph/api/intune-rbac-operationapprovalrequest-create?view=graph-rest-beta">source</a>). I also found a new tool from a fella named Mark Orr who wrote a PowerShell module for handling all aspects of MAA, you should check it out <a href="https://intune-maa.orr365.tech/">here</a></li>
  <li>Before implementing MAA, I would strongly recommend reviewing your processes for using actions like wipe and delete. They tie heavily into the device lifecycle process. It can heavily impact the daily operations in an IT ServiceDesk or an IT team that is managing devices in a multi-region company.</li>
  <li>Currently there is no option to assign an MAA Policy to a given set of devices or limit to specific scope tags or groups, it’s an all or nothing switch. If you decide to enable MAA in your tenant, be sure to communicate to all stakeholders in advance.</li>
  <li>Processing an action like Delete or Wipe is not immediate - Be patient :)</li>
  <li>If using Custom-RBAC Roles with Groups via PIM, sometimes the MAA pane doesn’t show all devices/requests - This can confuse support personnel. As a rule of thumb, wait 15 minutes after activating the group-based PIM role, and then reopen the Intune tab, to avoid this problem.</li>
</ol>

<h2 id="rounding-off">Rounding off</h2>

<p>There are definitely pros and cons for using MAA, and it needs to be well thought out before just blindly enabling it, since it can heavily affect your device lifecycle process, whilst there is also no option to scope an MAA Policy to just a group of test devices or test users, so it’s an all or nothing switch. MAA in its current shape and form, as of this date, is extremely rigid. It’s still very early days, and I’m sure Microsoft will give it some love over the coming months.</p>

<p>That’s all for now, I hope you found it useful. :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Intune" /><category term="Intune" /><category term="Security" /><category term="Security Best Practices" /><category term="Process" /><category term="MAA" /><category term="Multi Admin Approval" /><summary type="html"><![CDATA[Recently there was a major hack: the Stryker incident. You can read more about it here.]]></summary></entry><entry><title type="html">Windows Locked Down, macOS Wide Open: A Security Leadership Problem</title><link href="https://evil365.com/security/macOS-Windows-Security/" rel="alternate" type="text/html" title="Windows Locked Down, macOS Wide Open: A Security Leadership Problem" /><published>2026-03-13T00:00:00+00:00</published><updated>2026-03-13T00:00:00+00:00</updated><id>https://evil365.com/security/macOS-Windows-Security</id><content type="html" xml:base="https://evil365.com/security/macOS-Windows-Security/"><![CDATA[<p>I’ve had many conversations with developers, IT administrators, and decision makers at large organizations about security on Windows and macOS devices—especially how security controls affect developer experience and local administrator access.</p>

<p>What I hear consistently across customers and enterprises is not surprising: more new hires—especially developers—are choosing macOS over Windows when they start a job.</p>

<h2 id="why-developers-prefer-macos">Why developers prefer macOS</h2>

<p>Common feedback from developers is straightforward: “macOS is easier and faster. Everything just works and I can do what I need without restrictions.” That perception is driving platform choice for many technical hires.</p>

<p>Many organizations apply heavy security controls on Windows devices, which can push employees toward macOS. At the same time, those same organizations often apply far fewer controls to macOS devices. This creates an uneven security posture across the estate.</p>

<p>I see a few root causes:</p>

<ul>
  <li><strong>Tooling gaps:</strong> IT teams often lack out-of-the-box tools to manage features such as application control and local administrator rights for both platforms. Third-party solutions are frequently required.</li>
  <li><strong>Process shortcomings:</strong> exemption and approval workflows are often slow or poorly defined, which encourages workarounds</li>
  <li><strong>Knowledge gap:</strong> Many IT admins in Windows-first organizations have limited macOS experience. When macOS is introduced as a platform option, training is often missing, and admins are expected to manage it like Windows. Teams need to build basic macOS skills before they can run advanced security controls.</li>
  <li><strong>Leadership awareness:</strong> Decision makers needs to be aware of all of the above, when introducing macOS as a platform choice into their estate.</li>
</ul>

<h2 id="a-real-world-example">A real-world example</h2>

<p>One of my good friends whose also a developer, switched jobs, and joined a large bank in Denmark recently. He was given a Windows device with no administrator rights. While that policy aligns with security best practices, it created productivity friction: requests for temporary admin access took three to four weeks to process.</p>

<p>The workaround? The team provided a Mac mini with root privileges, that could be accessed remotely, where he could do his “actual” work, while outlook/teams was to be used on his Windows laptop. He could do everything he wanted on the mac mini, since he had root access, while still being able to access the same network and files as on the Windows device, effectively bypassing the controlled Windows environment. In the end, he just chose a macOS Laptop as his main working device, where he also have root access.</p>

<h2 id="recommendations">Recommendations</h2>

<p>To address this imbalance, organizations should consider:</p>

<ul>
  <li>Raising knowledge and awareness of macOS management+security in the IT team managing devices</li>
  <li>Streamline the developer onboarding experience for Windows, so it’s similar to macOS</li>
  <li>Be realistic about things like Security Baselines and CIS Baselines for Windows: User productivity and Security needs to be balanced.</li>
  <li>Consider acquiring a cross-platform PAM Solution for Endpoints that works both for macOS and Windows for managing local administrator/root access.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>The tension between developer productivity and enterprise security on windows is real. Rather than letting platform preference drive shadow IT, organizations should close the management gap between Windows and macOS—so that developers can be productive without creating unmanaged security risks.</p>

<p>macOS is definitely here to stay in the enterprise world, and adoption is growing rapidly as time progresses. When examining the hardware alone, specifically looking at the new macOS M5 chips, they have a major advantage over Windows-based offerings currently in the same space. ARM for Windows is slowly becoming a thing, but as of this date, Qualcomms chips is already falling behind from a performance perspective when compared to Apple. And we did not even cover the whole ARM-application and driver perspective for Windows yet, which is a huge problem for many orgs that prevents wide adoption</p>

<p>That’s all for now, have an awesome day :)</p>]]></content><author><name>Mads Johansen</name></author><category term="Security" /><category term="macOS" /><category term="Windows" /><category term="Endpoint Management" /><category term="Security Best Practices" /><category term="Process" /><summary type="html"><![CDATA[I’ve had many conversations with developers, IT administrators, and decision makers at large organizations about security on Windows and macOS devices—especially how security controls affect developer experience and local administrator access.]]></summary></entry></feed>