<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[merill.net]]></title><description><![CDATA[Merill's personal blog on tech, cybersecurity, personal branding, productivity and anything cool I'm excited about.]]></description><link>https://blog.merill.net</link><image><url>https://substackcdn.com/image/fetch/$s_!R9IJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6dd8d66-4832-4513-bed7-8dbf2e9bb706_871x871.png</url><title>merill.net</title><link>https://blog.merill.net</link></image><generator>Substack</generator><lastBuildDate>Tue, 14 Apr 2026 16:04:57 GMT</lastBuildDate><atom:link href="https://blog.merill.net/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Merill Fernando]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[substack@merill.net]]></webMaster><itunes:owner><itunes:email><![CDATA[substack@merill.net]]></itunes:email><itunes:name><![CDATA[Merill Fernando]]></itunes:name></itunes:owner><itunes:author><![CDATA[Merill Fernando]]></itunes:author><googleplay:owner><![CDATA[substack@merill.net]]></googleplay:owner><googleplay:email><![CDATA[substack@merill.net]]></googleplay:email><googleplay:author><![CDATA[Merill Fernando]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Uninstall-Graph PowerShell]]></title><description><![CDATA[Free and open source cmdlet to force remove all Microsoft Graph PowerShell modules from your system.]]></description><link>https://blog.merill.net/p/uninstall-graph-powershell</link><guid isPermaLink="false">https://blog.merill.net/p/uninstall-graph-powershell</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Thu, 29 May 2025 01:37:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!V-Qq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The Graph PowerShell module is a complicated beast. It has multiple modules and due to various reasons you might want to get back to a clean slate of no Graph PowerShell modules in your system.</p><p>To solve this I built a module that does just one thing</p><p><strong>Uninstall-Graph</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://uninstall-graph.merill.net" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V-Qq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 424w, https://substackcdn.com/image/fetch/$s_!V-Qq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 848w, https://substackcdn.com/image/fetch/$s_!V-Qq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!V-Qq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V-Qq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg" width="1200" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Landing page of site with text: Clean Slate for Your\nMicrosoft Graph\nPowerShell Environment\nCompletely uninstalls and removes all Microsoft Graph PowerShell modules from your system. Say goodbye to dependency conflicts and multiple authentication prompts.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://uninstall-graph.merill.net&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Landing page of site with text: Clean Slate for Your
Microsoft Graph
PowerShell Environment
Completely uninstalls and removes all Microsoft Graph PowerShell modules from your system. Say goodbye to dependency conflicts and multiple authentication prompts." title="Landing page of site with text: Clean Slate for Your
Microsoft Graph
PowerShell Environment
Completely uninstalls and removes all Microsoft Graph PowerShell modules from your system. Say goodbye to dependency conflicts and multiple authentication prompts." srcset="https://substackcdn.com/image/fetch/$s_!V-Qq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 424w, https://substackcdn.com/image/fetch/$s_!V-Qq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 848w, https://substackcdn.com/image/fetch/$s_!V-Qq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!V-Qq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc14c03af-e1d4-43d9-91b2-e19e8ff299cd_1200x914.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can get it at <a href="https://uninstall-graph.merill.net">uninstall-graph.merill.net</a>.</p><p>It basically runs through multiple times to uninstall all the modules and then finally cleans out the folders for the ones that are stubborn.</p><p>Remember to restart a fresh PowerShell session after running this.</p><h2>Why is the Graph PowerShell module so special?</h2><p>For starters, some graph modules depend on other graph modules then you have various non-Microsoft modules (like <a href="https://maester.dev">Maester</a>) that rely on Graph modules.</p><p>This means uninstalling them is not as simple as running</p><pre><code><code>Uninstall-Module Microsoft.Graph</code></code></pre><p>You would typically see something like this error.</p><pre><code>PackageManagement\Uninstall-Package : The module 'Microsoft.Graph.Applications' of version '2.12.0' in module base folder 'C:\Program Files\WindowsPowerShell\Modules\Microsoft.Graph.Applications\2.12.0' cannot be uninstalled, because one or more other modules 'Microsoft.Graph' are dependent on this module. Uninstall the modules that depend on this module before uninstalling module 'Microsoft.Graph.Applications'.</code></pre><h2>Why would you need to uninstall Microsoft Graph in the first place?</h2><p>Well the most common reason is that you end up with different versions of the various Graph PowerShell modules and one day you will be hit errors like this</p><pre><code>Could not load file or assembly 'Microsoft.Graph.Authentication, Version=2.8.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.</code></pre><p>or</p><pre><code>Import Graph module fails with Could not load file or assembly 'Azure.Core, Version=1.39.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' or one of its dependencies. The system cannot find the file specified</code></pre><p>or something similar.</p><p></p><p>So getting back to a clean slate and then installing the modules afresh is my preferred solution for this problem.</p><p>I&#8217;m keen on having this module address all the edge cases when it comes to uninstalling the Graph PS modules. So if you come across any issues please raise them on GitHub. Thanks!</p>]]></content:encoded></item><item><title><![CDATA[How I create the Entra.Chat podcast]]></title><description><![CDATA[Here's my weekly workflow for recording and publishing a weekly podcast.]]></description><link>https://blog.merill.net/p/how-i-create-the-entrachat-podcast</link><guid isPermaLink="false">https://blog.merill.net/p/how-i-create-the-entrachat-podcast</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Fri, 25 Apr 2025 04:57:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0axF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>All of the apps/tools I use below are free ($0) except</p><ul><li><p><a href="http://riverside.fm">Riverside</a> Standard (I got a 50% discount coupon so paid $90 for first year)</p></li><li><p>Podcast Chapters which was a one time $20.</p></li><li><p>Fedica - for cross posting podcast clips ($10 per month)</p></li></ul><p>I run a weekly podcast with a new guest for each episode.</p><p>This is a solo effort where I do EVERYTHING (schedule, interview, edit, publish).</p><p>So I am constantly scheduling, recording, editing and publishing my podcast. Even reaching out and keeping track of the people I reached out is crazy since I might have DMd on LinkedIn, Twitter, Email, Teams/Slack.</p><p>I tried various note taking apps and calendar integrations like Notion but couldn't get a handle on things.</p><p>What finally worked for me is </p><p><a href="https://superthread.com/">superthread.com</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0axF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0axF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 424w, https://substackcdn.com/image/fetch/$s_!0axF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 848w, https://substackcdn.com/image/fetch/$s_!0axF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 1272w, https://substackcdn.com/image/fetch/$s_!0axF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0axF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:697262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/162101074?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0axF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 424w, https://substackcdn.com/image/fetch/$s_!0axF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 848w, https://substackcdn.com/image/fetch/$s_!0axF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 1272w, https://substackcdn.com/image/fetch/$s_!0axF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F741c723c-566a-4c26-88cf-3fce2bf3ad0e_3688x2046.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Using it I was able to create a kanban where I progressed each guest through a workflow. They went from</p><ul><li><p>Backlog - People I want to get on the podcast</p></li><li><p>Scheduling - People I've reached out to (this card has status us Invited/Agreed) if they say yes I tag as Agreed so I know I can schedule them.</p></li><li><p>Scheduled - This is once I have them locked in for a date</p></li><li><p>Recorded - These are ones I've completed recording but haven't edited or published</p></li><li><p>Editing In Progress - These are ones that I'm editing</p></li><li><p>Published - These are ones that have gone out to everyone.</p></li></ul><p>Superthread has a rich notes page that is linked to the card for each person/episode. This way I can quickly drill into the note where I store questions and add in notes during the meeting.</p><p>I like it so much I use it for tracking my content ideas and ideas for the apps I&#8217;m building.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gYpb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gYpb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 424w, https://substackcdn.com/image/fetch/$s_!gYpb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 848w, https://substackcdn.com/image/fetch/$s_!gYpb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 1272w, https://substackcdn.com/image/fetch/$s_!gYpb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gYpb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png" width="1456" height="1169" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1169,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:715120,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/162101074?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gYpb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 424w, https://substackcdn.com/image/fetch/$s_!gYpb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 848w, https://substackcdn.com/image/fetch/$s_!gYpb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 1272w, https://substackcdn.com/image/fetch/$s_!gYpb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b18587-919b-4bf3-a17b-07303ab31dd2_1736x1394.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Podcast Editing Process</h2><p>Okay, now to the actual editing and publishing process (I use Riverside to edit)</p><p>I publish video to YouTube and Spotify and audio to everywhere else. I use Substack as my pod website, audio file host.</p><p>Here's my workflow (I keep this in an .md file and keep refining them each week (One day I'm hoping to build an AI agent that automates all this)</p><pre><code># Podcast creation process

## Edit in Riverside

- In Riverside, edit the podcast by listening to the audio and making cuts as needed.
- Use the smart scene option to generate autoamatic multicam cuts.
- Change video layout (eg me scratching my head)
- If track is not in sync with video click through and add a delay to the track.

&#9989; Export a 4k version of the video (only use the remove watermark option on export).

## DaVinci Resolve

- Import the video into DaVinci Resolve.
- Use the Assets in this folder (intro, outro etc)
- Take two or three interesting clips from the conten and insert them at the beginning.
- The YT thumbnail should be relevaant to the first clip or overall theme of the podcast.

&#9989; Render YouTube 4k preset and audio only with mp3 audio.

## Titles, Chapters and Description

- Upload audio track to substack to create transcript and download it.
- Use the prompt.md in Gemini to generate titles, chapters and description.
- Create a chapters.csv file with the chapters and timestamps generated by Gemini.
- Use Podcast Chapters (https://chaptersapp.com/) and import the mp3, csv and add images and chapter titles.</code></pre><p>Below is the the prompt.md file that I use with Gemini <a href="http://gemini.google.com/">gemini.google.com</a></p><p></p><pre><code><strong>prompt.md</strong>

Create a viral heading for a youtube video from this podcast transcript. Make it short and exciting and create variations that will incite fomo or curiosity or controversy. 

Give a short thumbnail title as well as a video title.

Also include a summary of the podcast and create highlevel chapter headings. Include the timestamp (minutes and seconds) for the chapter heading so it can be used in youtube and podcast chapters. It should be like this: 
00:00 Intro

Make sure the chapter headings are clean and simply and start accurately with the right time stamp and sentence

Also give me the chapters in the format of chapter name, timestamp and in a csv format so I can copy and paste into a csv file.



------------------------------------------------------------------------------------
Template for Notes
------------------------------------------------------------------------------------

# &#127897;&#65039; Entra.Chat - https://entra.chat

&lt;description&gt;

Subscribe with your favorite podcast player or watch on YouTube &#128071;

&#8212;&#8212;
### About &lt;Name&gt;

&lt;Description&gt;

LinkedIn - https://linkedin.com/in/

&#8212;&#8212;

&#128279; Related Links

&#8226; Title - https://

&#8212;&#8212;

&#128215; Chapters

00:00 Name

&#8212;&#8212;

### Podcast Apps

&#127897;&#65039; Entra.Chat - https://entra.chat

&#127911; Apple Podcast &#8594; https://entra.chat/apple

&#128250; YouTube &#8594; https://entra.chat/youtube

&#128250; Spotify &#8594; https://entra.chat/spotify

&#127911; Overcast &#8594; https://entra.chat/overcast

&#127911; Pocketcast &#8594; https://entra.chat/pocketcast

&#127911; Others &#8594; https://entra.chat/rss

&#8212;&#8212;

### Merill's socials

&#128250; YouTube &#8594; [youtube.com/@merillx](https://youtube.com/@merillx)

&#128084; LinkedIn &#8594; [linkedin.com/in/merill](https://linkedin.com/in/merill)

&#128036; Twitter &#8594; [twitter.com/merill](https://twitter.com/merill)

&#128378; TikTok &#8594; [tiktok.com/@merillf](https://www.tiktok.com/@merillf)

&#129419; Bluesky &#8594; [bsky.app/profile/merill.net](https://bsky.app/profile/merill.net)

&#128024; Mastodon &#8594; [infosec.exchange/@merill](https://infosec.exchange/@merill)

&#129525; Threads &#8594; [threads.net/@merillf](https://www.threads.net/@merillf)

&#129302; GitHub &#8594; [github.com/merill](https://github.com/merill)</code></pre><p>I download the transcript generated by Substack (they do it for free!) and copy/paste the prompt and attach the file to create the notes as well as the csv file for burning the chapter markers and notes into the mp3 file (using https://chaptersapp.com/).</p><p>Once I burn the .mp3 with chapter notes I re-upload it to Substack (this is the version that gets sent out).</p><p></p><h2>Podcast clips</h2><p>I create about 5-6 short clips out of the recording. Because I don't have the premium version in Riverside I create a portrait video version in Riverside, export it and then use Da Vinci to cut out about 5-6 short clips that are 1-2 min long.</p><p>I then use Fedica (a paid service) to schedule and publish one clip every day of the week (plus I sprinkle some for future dates). These get cross posted to all the social media including YT Shorts and TikTok.</p><p>So what do you think? What areas would you improve on this? Anything that I should drop? Things I should do to improve the process?</p>]]></content:encoded></item><item><title><![CDATA[Service Principal as a 'Plan B' emergency access break-glass account]]></title><description><![CDATA[The verdict from the Entra community...]]></description><link>https://blog.merill.net/p/service-principal-as-a-plan-b-emergency</link><guid isPermaLink="false">https://blog.merill.net/p/service-principal-as-a-plan-b-emergency</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Fri, 25 Apr 2025 04:00:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the world of Microsoft Entra ID management, few topics generate as much passionate debate as emergency access strategies.</p><p>Recently, I posed this question in a poll on <a href="https://www.linkedin.com/posts/merill_there-was-some-healthy-discussion-this-week-activity-7317075267636600832-k64A?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAE2HdgBr18Dks1IiZ7TlCEOKbW_5legOj0">LinkedIn</a> and <a href="https://x.com/merill/status/1911311538486714733">X</a>: </p><blockquote><p><em><strong>What do you think of using Apps (Service Principals) as a 'Plan B' emergency access account?</strong></em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oJm9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oJm9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 424w, https://substackcdn.com/image/fetch/$s_!oJm9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 848w, https://substackcdn.com/image/fetch/$s_!oJm9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!oJm9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oJm9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png" width="1168" height="1018" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1018,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:556918,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/162094196?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oJm9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 424w, https://substackcdn.com/image/fetch/$s_!oJm9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 848w, https://substackcdn.com/image/fetch/$s_!oJm9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!oJm9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f20dd2d-2c93-419b-8d6d-3c344fbb5a1e_1168x1018.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Here&#8217;s the combined results from the 817 votes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CqNB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CqNB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 424w, https://substackcdn.com/image/fetch/$s_!CqNB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 848w, https://substackcdn.com/image/fetch/$s_!CqNB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 1272w, https://substackcdn.com/image/fetch/$s_!CqNB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CqNB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png" width="1456" height="1452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1452,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:893894,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/162094196?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CqNB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 424w, https://substackcdn.com/image/fetch/$s_!CqNB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 848w, https://substackcdn.com/image/fetch/$s_!CqNB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 1272w, https://substackcdn.com/image/fetch/$s_!CqNB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddc2c5fc-7145-4598-90a8-77ca2940c53c_1646x1642.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>This split reflects the nuanced nature of the topic, with no clear consensus. In this blog post, I&#8217;ll break down the approach of assigning a Global Administrator (GA) role to an SP for emergency access, analyze the pros and cons based on community feedback, and share my personal take on the matter.</p><p></p><h2>Why emergency access accounts?</h2><p>Getting locked out of your Entra tenant is the stuff of nightmares for any IT administrator or security professional. Whether it's a misconfigured Conditional Access policy, a lost or broken multi-factor authentication device, or an expired credential, the inability to access your critical cloud environment can bring operations to a grinding halt.</p><p>Microsoft&#8217;s recommendation has been to set up a "break-glass" or "emergency access" user account. These highly privileged accounts are kept under strict control, excluded from standard Conditional Access policies and secured with robust methods like FIDO2 keys stored securely offsite. Their usage is heavily monitored and alerts are triggered immediately upon sign-in.</p><p>But in the evolving landscape of cloud identity, a new idea has surfaced, sparking considerable debate: <strong>What about using an Application (specifically, a Service Principal) with Global Administrator permissions as an emergency access mechanism?</strong></p><p>This approach hinges on the fact that Service Principals authenticate differently than users, often using certificates or secrets, which bypasses user-focused Conditional Access policies. The idea is to create a Service Principal, grant it the Global Administrator Entra role, and secure its credentials (ideally a certificate on a hardware security module like a YubiKey) and monitor its activity rigorously.</p><p>The earliest reference for this approach that I&#8217;ve seen is this reddit post from 2023 &#8216;<a href="https://www.reddit.com/r/AZURE/comments/150cz0q/using_service_principal_as_azure_ad_break_glass/">Using Service principal as Azure AD Break glass access</a>&#8217;. At that time I dismissed the idea, but lately I&#8217;ve seen quite a few posts on various forums where admins had locked themselves out of their tenant and it got me thinking about using SPs.</p><p>So that&#8217;s where the poll came in &#8594; <strong>"What do you think of using Apps (Service Principals) as a 'Plan B' emergency access account?"</strong> The results, based on 817 votes, were quite telling:</p><ul><li><p><strong>Yes:</strong> 165 (20.2%)</p></li><li><p><strong>No:</strong> 327 (40.0%)</p></li><li><p><strong>Maybe:</strong> 325 (39.8%)</p></li></ul><p>The poll results clearly indicate a significant level of hesitation or outright opposition to this approach. The combined "No" and "Maybe" votes represent nearly 80% of the responses, suggesting that while there's <em>some</em> interest or recognition of potential edge cases ("Maybe"), the majority are either against it or highly skeptical.</p><p>Let's delve into the lively discussion that followed to understand the reasoning behind these votes.</p><h3>Analysis of Community Responses: The Pros and Cons Unpacked</h3><p>The comments on both platforms provided invaluable context to the poll numbers, highlighting strong opinions and practical experiences.</p><p><strong>Arguments Against (The "No" Votes and Skeptical "Maybe"s):</strong></p><p>The most prevalent concerns centered around security risks and complexity:</p><ol><li><p><strong>Lack of MFA:</strong> A major drawback repeatedly cited is that Service Principals cannot natively perform multi-factor authentication in the same way a user account does. While certificate-based authentication is strong, it's seen by many as not a direct equivalent to user+MFA, leaving a perceived gap.</p></li><li><p><strong>Credential Management Hell:</strong> The security of a Service Principal relies entirely on the security of its credentials (secrets or certificates). Many respondents expressed concern that organizations already struggle with managing user credentials and application secrets. Adding a highly privileged SP with poorly managed credentials (e.g., secrets stored insecurely, certificates expiring or on insecure devices) introduces a significant attack vector. Mathias Dumont and Alexander specifically highlighted this risk.</p></li><li><p><strong>Privilege Escalation Path:</strong> Granting a Service Principal Global Administrator is immensely powerful. Several folks, including Jordan Pitcairn, Stian Andresen Strysse, and Graham Gold, pointed out that the <code>App Administrator</code> and <code>Cloud Application Administrator</code> roles have the power to manage credentials for Service Principals. If these admin roles are not tightly controlled (e.g., via PIM), an attacker compromising one of these roles could potentially create new credentials for the break-glass SP and gain GA access without needing to compromise the original secured credential. Graham Gold explicitly stated, "App Administrator = Tier 0... If not gated with PIM and approvals, you&#8217;re handing out a backdoor to GA."</p></li><li><p><strong>Complexity and "Hackiness":</strong> Niclas Madsen strongly felt this is a "bad design and a 'hack'," adding unnecessary complexity that introduces risk. Jesper Joachim Raarup echoed this, arguing it adds another "angle of attack" and distracts from fundamental security hygiene. The KISS (Keep It Simple, Stupid) principle was invoked by K&#233;vin KISOKA and Amanda Wuest.</p></li><li><p><strong>Lack of Dedicated Controls:</strong> Jackson Sweeney and D Lind highlighted the lack of granular controls like Restricted Administrative Units (RAUs) for Service Principals, making it harder to isolate and protect them compared to privileged user accounts (though RAUs for users also have limitations).</p></li><li><p><strong>Workload Identity CA Dependency:</strong> While Conditional Access policies for Workload Identities exist and were mentioned as a potential mitigation (Eric Mannon, Tom Camps, Michaelsoft Binbows), many organizations haven't implemented them, or they aren't as mature as user CA policies. Relying on this for the security of a break-glass SP is seen as risky if the organization's maturity isn't high enough (Graham Gold).</p></li><li><p><strong>Doesn't Solve Core Problems:</strong> Some felt this approach doesn't address the root cause of lockouts (poor policy design) or the fundamental need for robust break-glass <em>user</em> accounts (Alexander, John Hoddinott).</p></li></ol><p><strong>Arguments For or Accepting in Specific Cases (The "Yes" Votes and Accepting "Maybe"s):</strong></p><p>Despite the strong opposition, there were compelling arguments and scenarios where this approach was seen as viable or even necessary:</p><ol><li><p><strong>Bypassing Restrictive CA Policies:</strong> The most significant practical advantage mentioned by proponents like Stian Andresen Strysse, Gabe Delaney, and Roel van der Wegen is that a Service Principal <em>can</em> circumvent user-based Conditional Access policies that might block <em>all</em> user sign-ins, including traditional break-glass users (if they weren't properly excluded or if the exclusion failed). Gabe and Roel shared real-world experiences where they used application permissions to regain access to locked-out tenants.</p></li><li><p><strong>MSPs and Scaling:</strong> Roel made a specific case for MSPs managing hundreds of tenants. Managing physical FIDO keys for break-glass users across numerous clients becomes logistically challenging. A multi-tenant application approach, with careful credential management and monitoring, could be a more scalable "Plan B" for MSPs, though this was debated due to supply chain risks (Jesper Joachim Raarup).</p></li><li><p><strong>Requires a Robust Framework:</strong> Many "Maybe" votes and some "Yes" arguments (Gabe Delaney, Kirby Clements, Michael Cramer) stressed that this isn't something to be done lightly. It requires a dedicated framework including:</p><ul><li><p>Strict credential management (HSM, certificates).</p></li><li><p>Comprehensive monitoring and alerting on <em>any</em> activity or modification of the SP or its credentials.</p></li><li><p>Clear boundaries on the SP's permissions (though for GA break-glass, this is inherently broad).</p></li><li><p>Protection against accidental modification.</p></li></ul></li><li><p><strong>Microsoft Should Build It:</strong> Michael Cramer proposed that Microsoft should create a built-in, purpose-designed recovery account feature in Entra ID, secured by design (e.g., mandatory multiple FIDO keys, automatic CA exclusion, special auditing), rather than leaving admins to implement potentially risky workarounds. Kirby Clements agreed, suggesting Microsoft could formalize this by restricting management of such SPs to only GAs or a new dedicated role.</p></li><li><p><strong>Better Than Poor User Break-Glass:</strong> Some implied that a well-implemented SP break-glass <em>could</em> be more secure than traditional user break-glass accounts secured only with password managers or single, easily compromised MFA methods.</p></li></ol><h3>Conclusion from the Responses</h3><p>Based on the poll results and the detailed comments, the community sentiment is clear: <strong>Using a Service Principal with Global Administrator rights as a general break-glass emergency access account is largely viewed with skepticism and concern (the combined 80% "No" and "Maybe" votes).</strong></p><p>The primary reasons for this apprehension are the inherent security challenges of managing Service Principal credentials, the potential for privilege escalation through less-controlled App Admin roles, the lack of native user-like MFA, and the added complexity compared to traditional methods.</p><p>While there's recognition that this approach <em>could</em> be useful in specific, dire lockout scenarios (especially those caused by CA policies affecting users) or perhaps for specific operational models like MSPs, the consensus is that the security risks, if not mitigated by an exceptionally robust security framework, monitoring, and strict controls over App Admin roles, outweigh the potential benefits for most organizations. The "Maybe" votes indicate that for some, the idea isn't outright rejected but is contingent on significant safeguards and potentially official tooling or guidance from Microsoft.</p><p>Ultimately, the discussion highlights a perceived gap in current Entra ID capabilities for truly resilient emergency access that can bypass even fundamental policy misconfigurations, alongside a lack of organizational maturity in securing workload identities compared to user identities.</p><h3>My Personal Opinion</h3><p><em>(Please note: This is my personal opinion and does not represent the official stance of my employer, Microsoft.)</em></p><p>The poll responses definitely opened my eyes to new risks I hadn&#8217;t considered before as well as concrete examples of the usefulness when managing a large number of tenants like MSPs (or even an Enterprise with 100s of tenants).</p><p>I lean towards "Yes" for <em>specific types</em> of tenants, and this stance is based on a few key observations:</p><ol><li><p><strong>Increased Lockout Vectors:</strong> It's true that the ways to lock yourself out of a tenant have proliferated. Beyond losing a password/MFA, misconfigured Conditional Access policies (blocking all access), authentication strengths, or even Passkey profiles can render all user accounts inaccessible. The risk of an accidental, tenant-wide lockout seems higher than before.</p></li><li><p><strong>Difficulty of Recovery:</strong> As <a href="https://www.reddit.com/r/AZURE/comments/1jl4yoj/at_my_whits_end_with_microsoft_support_azure/">this Reddit post</a> illustrates, recovering access to a locked-out tenant via Microsoft Support is, by design, a difficult and time-consuming process. And it absolutely <em>should</em> be hard. Microsoft must rigorously verify identity before handing over control of a tenant to prevent threat actors from easily claiming ownership. However, for legitimate administrators facing a crisis, this process can be agonizingly slow (or impossible if you don&#8217;t have any form of mechanism to show concrete proof linking you to the tenant).</p></li><li><p><strong>Tenant Type Matters:</strong></p><ul><li><p><strong>Entra ID Free Tenants, M365 Dev tenants: </strong>(Yes)<strong> </strong> These tenants don&#8217;t have a clear way to prove ownership. No linked credit card etc. Although you can&#8217;t create new M365 Dev tenants (the free ones), for those who already own them they are indispensable and would be a huge loss if you lost access. Plus, today it&#8217;s almost impossible to recover them if you lock yourself out.</p></li><li><p><strong>Customers with Enterprise Agreements and dedicated Microsoft account teams:</strong> These organizations have direct access to Microsoft support channels and resources that can potentially expedite recovery in extreme circumstances. The need for a self-service, potentially risky workaround is diminished (Maybe from me).</p></li><li><p><strong>Production tenants where your CEO can call Satya on the phone:</strong> Do you even need break-glass accounts? &#128514;</p></li></ul></li></ol><p></p><h3>Creating a Break-Glass Service Principal account</h3><p><strong>If I were to create a Service Principal for break-glass (for appropriate tenant types), here is how I would configure it:</strong></p><ul><li><p><strong>Create Emergency Access Service Principal:</strong> A dedicated app (jury is out on single tenant vs multi-tenant app). </p><ul><li><p>Multi-tenant SPs cannot be blocked by Workload ID CA policies in other tenants (today).</p></li><li><p>Workload ID still requires a seperate license so not many tenants have this proactively. If you do have such a policy you will need to exclude this account from the workload ID CA policy.</p></li></ul></li><li><p><strong>Grant Entra GA role:</strong> Why such a wide role? It&#8217;s hard to predict what can go wrong. The last thing you need is to do all the prep work but the account is not usable to help with tenant recovery.</p></li><li><p><strong>Secure Credentials with HSM Certificate:</strong> Crucially, use certificate-based authentication. Generate the certificate signing request (CSR) on a local Hardware Security Module (HSM), such as a YubiKey or a dedicated hardware appliance. The private key <em>never</em> leaves the HSM.</p></li><li><p><strong>Robust Monitoring:</strong> Implement immediate and high-priority alerting whenever this Service Principal signs in or is used. This requires integration with a SIEM like Microsoft Sentinel or a dedicated monitoring system. KQL queries watching Entra ID sign-in and audit logs would be essential. Alerts should go via multiple channels (email, SMS, SOC alert). A GitHub Action or similar automation could be used to trigger checks and alerts.</p></li><li><p><strong>Redundancy for Monitoring:</strong> Have a separate, independent system (perhaps a third-party monitoring tool outside of Entra ID control that the SP couldn't easily disable) that performs a "heartbeat" check to ensure your primary monitoring and alerting systems (like the GitHub Action) are still operational. If the heartbeat stops, it triggers an alert.</p></li></ul><p></p><blockquote><p>Someday I hope to build a PowerShell module or an app that makes it super easy to set this up correctly and manage it. &#128521;</p></blockquote><p></p><h4>References and further reading</h4><ul><li><p><a href="https://blog.admindroid.com/how-to-set-up-break-glass-access-application-for-admin-recovery/">How to Configure an Emergency Access App in Entra ID</a> - Lokesh</p></li><li><p><a href="https://www.linkedin.com/posts/graham-gold_m365-breakglass-maturitymodel-activity-7320507164870025217-qzuo?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAE2HdgBr18Dks1IiZ7TlCEOKbW_5legOj0">M365 Breakglass Maturity Model</a> - Graham Gold</p></li><li><p><a href="https://www.linkedin.com/posts/elishlomo_security-cybersecurity-activity-7320131888096923648-8cxX/">Attacker&#8217;s Breakdown: M365 Break Glass Maturity</a> - Elli Shlomo</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Microsoft 365 Dev Program Update]]></title><description><![CDATA[Finally! Microsoft just shared an update on the Microsoft 365 Developer Program.]]></description><link>https://blog.merill.net/p/microsoft-365-dev-program-update</link><guid isPermaLink="false">https://blog.merill.net/p/microsoft-365-dev-program-update</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Thu, 24 Apr 2025 00:38:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ra6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ra6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ra6G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 424w, https://substackcdn.com/image/fetch/$s_!ra6G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 848w, https://substackcdn.com/image/fetch/$s_!ra6G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 1272w, https://substackcdn.com/image/fetch/$s_!ra6G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ra6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png" width="1456" height="1157" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1157,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:788001,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/162009523?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ra6G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 424w, https://substackcdn.com/image/fetch/$s_!ra6G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 848w, https://substackcdn.com/image/fetch/$s_!ra6G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 1272w, https://substackcdn.com/image/fetch/$s_!ra6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff85a781b-bae6-481f-8f9b-e4359ba87e85_1546x1228.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There's not much meat in it but it hints at Microsoft working on making it available again (don't quote me on this).</p><p>You can read the announcement at <a href="https://devblogs.microsoft.com/microsoft365dev/exciting-updates-coming-to-the-microsoft-365-developer-program/">Exciting updates coming to the Microsoft 365 Developer Program</a></p><p>I like some of the improvements like being able to add new licenses to the tenant, etc.</p><p>Hopefully we&#8217;ll see more details coming through and this launching.</p><p>Also check out Andrew's hot take &#128071;</p><div id="youtube2-NwSAOXhAS18" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;NwSAOXhAS18&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/NwSAOXhAS18?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[Using Pester to regression test Maester tests]]></title><description><![CDATA[Quick write up on regression testing and refactoring with copilot]]></description><link>https://blog.merill.net/p/using-pester-to-regression-test-maester</link><guid isPermaLink="false">https://blog.merill.net/p/using-pester-to-regression-test-maester</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Fri, 18 Apr 2025 02:54:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yQ9I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yQ9I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yQ9I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 424w, https://substackcdn.com/image/fetch/$s_!yQ9I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 848w, https://substackcdn.com/image/fetch/$s_!yQ9I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 1272w, https://substackcdn.com/image/fetch/$s_!yQ9I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yQ9I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png" width="1456" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110082,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/161582195?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yQ9I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 424w, https://substackcdn.com/image/fetch/$s_!yQ9I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 848w, https://substackcdn.com/image/fetch/$s_!yQ9I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 1272w, https://substackcdn.com/image/fetch/$s_!yQ9I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a73c0e1-e58c-40e5-a1ad-99b98dc9f9b0_1508x490.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pester tests for &#128293; Maester test!</figcaption></figure></div><p>I was fixing a Maester bug and thought it would be good to share my process for going about it.</p><p>We start off with a Maester bug (<a href="https://github.com/maester365/maester/issues/804">Issue with MT. 1016 #804</a>). In this instance the tenant had a CA policy for All Users but did not have one explicitly targeting guests.</p><blockquote><p>While it&#8217;s alway a better practice to have a seperate set of policies for guests, Maester should not penalise them for this. Technically they are in the clear since MFA being applied to all users including guests.</p></blockquote><p>Now the existing code for this check was getting too long and adding more parts to this expression was going to make it hard to maintain.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CIPl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CIPl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 424w, https://substackcdn.com/image/fetch/$s_!CIPl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 848w, https://substackcdn.com/image/fetch/$s_!CIPl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 1272w, https://substackcdn.com/image/fetch/$s_!CIPl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CIPl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png" width="1456" height="287" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8f03906-0977-423e-bf52-6b7b93018590_1666x328.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:287,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84795,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/161582195?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CIPl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 424w, https://substackcdn.com/image/fetch/$s_!CIPl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 848w, https://substackcdn.com/image/fetch/$s_!CIPl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 1272w, https://substackcdn.com/image/fetch/$s_!CIPl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f03906-0977-423e-bf52-6b7b93018590_1666x328.png 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">Original code for Guest MFA check</figcaption></figure></div><p>GitHub Copilot to the rescue! I prompted and got a much cleaner implementation and was able to add the additional check.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hytA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hytA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 424w, https://substackcdn.com/image/fetch/$s_!hytA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 848w, https://substackcdn.com/image/fetch/$s_!hytA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 1272w, https://substackcdn.com/image/fetch/$s_!hytA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hytA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png" width="1456" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184366,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/161582195?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hytA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 424w, https://substackcdn.com/image/fetch/$s_!hytA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 848w, https://substackcdn.com/image/fetch/$s_!hytA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 1272w, https://substackcdn.com/image/fetch/$s_!hytA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a757441-bcb2-4915-81bb-6809b693165e_1660x538.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Refactored code for Guest MFA check</figcaption></figure></div><p>Now we need to test if it&#8217;s working as expected. This involves creating a bunch of CA policies to test and how do we make sure it keeps working with future changes?</p><p>That&#8217;s where Pester tests come in. I created a bunch of Pester tests to simulate various types of CA policies. Some targeting all users, others targeting just guests and also checking if any type of guest had been excluded.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fuMN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fuMN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 424w, https://substackcdn.com/image/fetch/$s_!fuMN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 848w, https://substackcdn.com/image/fetch/$s_!fuMN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 1272w, https://substackcdn.com/image/fetch/$s_!fuMN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fuMN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png" width="1456" height="1450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1450,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:564956,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/161582195?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fuMN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 424w, https://substackcdn.com/image/fetch/$s_!fuMN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 848w, https://substackcdn.com/image/fetch/$s_!fuMN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 1272w, https://substackcdn.com/image/fetch/$s_!fuMN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f80e007-7695-4574-a3ad-cc558d63f453_2114x2106.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pester tests to validate Test-MtCaMfaForGuest</figcaption></figure></div><p>How I went about this copying out the json of the CA policy. This one here targets guests but excludes the B2B Collab Guest type. This type of policy should be failed by Maester since the tenant is missing an important chunk of guest users being required to have MFA.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2WVy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2WVy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 424w, https://substackcdn.com/image/fetch/$s_!2WVy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 848w, https://substackcdn.com/image/fetch/$s_!2WVy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 1272w, https://substackcdn.com/image/fetch/$s_!2WVy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2WVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png" width="1456" height="1333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1333,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279592,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/161582195?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2WVy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 424w, https://substackcdn.com/image/fetch/$s_!2WVy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 848w, https://substackcdn.com/image/fetch/$s_!2WVy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 1272w, https://substackcdn.com/image/fetch/$s_!2WVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e8c927-93f0-4b06-b2f1-cd2670cd35a4_1986x1818.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Json of CA policy used for mocking tests</figcaption></figure></div><ul><li><p>Maester Test: <a href="https://github.com/maester365/maester/blob/main/powershell/public/Test-MtCaMfaForGuest.ps1">Test-MtCaMfaForGuest.ps1</a></p></li><li><p>Pester Test File: <a href="https://github.com/maester365/maester/blob/main/powershell/tests/functions/Test-MtCaMfaForGuest.Tests.ps1">Test-MtCaMfaForGuest.Tests.ps1</a></p></li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[How I use AI as a second brain]]></title><description><![CDATA[GitHub Copilot is not just for code, here's how I use it for design thinking...]]></description><link>https://blog.merill.net/p/how-i-use-ai-as-a-second-brain</link><guid isPermaLink="false">https://blog.merill.net/p/how-i-use-ai-as-a-second-brain</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Thu, 10 Apr 2025 00:14:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0Fw9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is the start of a conversation I had with an AI to think through the design of changes I&#8217;m making to Lokka.</p><p>So far I&#8217;ve been mostly using GitHub Copilot and others to do specific tasks but I&#8217;m now starting to have design discussions and conversations to look for areas that I might be missing (or to play devils advocate).</p><p>I also pitted the LLMs against each other. Here&#8217;s a comparison.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Fw9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Fw9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 424w, https://substackcdn.com/image/fetch/$s_!0Fw9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 848w, https://substackcdn.com/image/fetch/$s_!0Fw9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 1272w, https://substackcdn.com/image/fetch/$s_!0Fw9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Fw9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png" width="1456" height="1308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1308,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:764053,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/160980116?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Fw9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 424w, https://substackcdn.com/image/fetch/$s_!0Fw9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 848w, https://substackcdn.com/image/fetch/$s_!0Fw9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 1272w, https://substackcdn.com/image/fetch/$s_!0Fw9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d74b7b7-ff22-4680-b5c6-3968cb34ec2a_2102x1888.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Claude provided a nice clean summary&#8230;</figcaption></figure></div><p>GitHub Copilot is not just for code, it&#8217;s great for design thinking too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8TBc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8TBc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 424w, https://substackcdn.com/image/fetch/$s_!8TBc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 848w, https://substackcdn.com/image/fetch/$s_!8TBc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 1272w, https://substackcdn.com/image/fetch/$s_!8TBc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8TBc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png" width="1456" height="1603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1603,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:731417,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/160980116?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8TBc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 424w, https://substackcdn.com/image/fetch/$s_!8TBc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 848w, https://substackcdn.com/image/fetch/$s_!8TBc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 1272w, https://substackcdn.com/image/fetch/$s_!8TBc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a41170-2c6a-4dca-bf3b-d4989d7ec344_2002x2204.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">GitHub Copilot</figcaption></figure></div><p>The last one I tried was Google Gemini&#8217;s Deep Research which looked up over 190+ sites including Microsoft docs, LLM docs to provide a complete four page report. Very impressive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!raHv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!raHv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 424w, https://substackcdn.com/image/fetch/$s_!raHv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 848w, https://substackcdn.com/image/fetch/$s_!raHv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 1272w, https://substackcdn.com/image/fetch/$s_!raHv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!raHv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png" width="1456" height="994" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:994,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:831337,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.merill.net/i/160980116?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!raHv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 424w, https://substackcdn.com/image/fetch/$s_!raHv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 848w, https://substackcdn.com/image/fetch/$s_!raHv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 1272w, https://substackcdn.com/image/fetch/$s_!raHv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90355636-5299-4fa6-9153-ea6c32251dae_3468x2368.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Google Gemini </figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[My projects]]></title><description><![CDATA[I &#128156; tinkering and hacking in my spare time and sharing them with the world. Some of these have become popular!]]></description><link>https://blog.merill.net/p/my-projects</link><guid isPermaLink="false">https://blog.merill.net/p/my-projects</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Tue, 01 Apr 2025 09:37:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2f9c30e0-7790-4b1f-a6a4-5ce7e77ae796_1640x476.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you find them useful please leave a note &#128591;</p><div><hr></div><h3><strong>Microsoft Community</strong></h3><p>Utilities that anyone in the Microsoft community will find useful.</p><ul><li><p>&#129302; <a href="https://lokka.dev">lokka.dev</a> - An AI agent tool that brings the power of Microsoft Graph to AI agents</p></li><li><p>&#9889; <a href="https://cmd.ms/">cmd.ms</a> - Your Microsoft Cloud command line.</p></li><li><p>&#128293; <a href="https://maester.dev/">maester.dev</a> - Microsoft test automation framework + security analyzer.</p></li><li><p>&#128270; <a href="https://akasearch.net/">akaSearch.net</a> - Community contributed search engine for aka.ms links</p></li><li><p>&#128172; <a href="https://mc.merill.net/">Microsoft 365 Message Center Archive</a> - Searchable archive of all Microsoft 365 Message Center posts.</p></li><li><p>&#127891; <a href="https://github.com/merill/refined-microsoft-learn">Refined Microsoft Learn</a> - Browser extension to make Microsoft Learn distraction free and focus on the content.</p></li><li><p>&#129419; <a href="https://bluesky.ms/">bluesky.ms</a> - Find Microsoft folks on Bluesky.</p></li></ul><div><hr></div><h3><strong>Microsoft Entra</strong></h3><p>Utilities for Microsoft 365 and Microsoft Entra admins and cybersecurity folks.</p><ul><li><p>&#128478;&#65039; <a href="https://entra.news/">Entra.News</a> - Stay up to date on all things Entra with this weekly newsletter with the latest updates on Microsoft Entra from both Microsoft and the community.</p></li><li><p>&#127911; <a href="https://entra.chat">Entra.Chat</a> - A weekly podcast on Microsoft Entra.</p></li><li><p>&#128170; <a href="https://idpowertoys.merill.net/">idPowerToys.merill.net</a></p><ul><li><p>Microsoft Entra related power toys including a Conditional Access visualizer and Entra mind maps.</p></li></ul></li><li><p>&#128238; <a href="https://aka.ms/AppNames">aka.ms/AppNames</a></p><ul><li><p>Repository hosting a daily updated csv/json of Microsoft first party app names and their GUIDs</p></li></ul></li><li><p>&#128451;&#65039; <a href="https://github.com/microsoft/EntraExporter">Entra Exporter</a></p><ul><li><p>PowerShell module that exports all the config and data of a Microsoft Entra tenant.</p></li></ul></li><li><p>&#128110; <a href="https://github.com/AzureAD/AzureADAssessment/wiki">Azure AD Assessment</a></p><ul><li><p>Guidance to assess the health of an Azure AD tenant and provide best practice guidance / recommendations.</p></li></ul></li><li><p>&#128296; <a href="https://aka.ms/msid">MSIdentityTools</a></p><ul><li><p>Collection of useful cmdlets for common Azure AD functionality</p></li></ul></li></ul><div><hr></div><h3><strong>Microsoft Graph</strong></h3><p>Utilities for everyone that works with Microsoft Graph and Graph PowerShell.</p><ul><li><p>&#129659; <a href="https://graphxray.merill.net/">Graph X-Ray</a></p><ul><li><p>Fiddler for Microsoft! Convert your actions in the Azure Portal to Graph PowerShell commands.</p></li></ul></li><li><p>&#129426; <a href="https://graphpermissions.merill.net/">Graph Permissions Explorer</a></p><ul><li><p>Site that shows all the Graph APIs and data exposed for a given Graph Permission.</p></li></ul></li></ul>]]></content:encoded></item><item><title><![CDATA[Linkable identifiers in Microsoft Entra ID logs]]></title><description><![CDATA[Threat hunters rejoice!]]></description><link>https://blog.merill.net/p/linkable-identifiers-in-microsoft</link><guid isPermaLink="false">https://blog.merill.net/p/linkable-identifiers-in-microsoft</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Tue, 01 Apr 2025 04:45:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yqP-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Threat hunters rejoice! This is HUUUGE news &#128079;<br><br>Microsoft just introduced linkable identifiers in Microsoft Entra ID logs.<br><br>The bad guys &#129399; are going to hate this so much &#128514;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yqP-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yqP-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 424w, https://substackcdn.com/image/fetch/$s_!yqP-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 848w, https://substackcdn.com/image/fetch/$s_!yqP-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!yqP-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yqP-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png" width="1200" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:457745,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://merill.substack.com/i/160316847?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yqP-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 424w, https://substackcdn.com/image/fetch/$s_!yqP-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 848w, https://substackcdn.com/image/fetch/$s_!yqP-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!yqP-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ee6b730-343a-4fef-a99b-fb86b052d091_1200x1500.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Learn more at https://learn.microsoft.com/en-us/entra/identity/authentication/how-to-authentication-track-linkable-identifiers<br></p>]]></content:encoded></item><item><title><![CDATA[I just launched 🦋 Bluesky.ms!]]></title><description><![CDATA[&#128640; I just launched my weekend hack project &#129419;.]]></description><link>https://blog.merill.net/p/bluesky-ms</link><guid isPermaLink="false">https://blog.merill.net/p/bluesky-ms</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Sat, 09 Nov 2024 08:00:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dPez!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dPez!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dPez!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 424w, https://substackcdn.com/image/fetch/$s_!dPez!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 848w, https://substackcdn.com/image/fetch/$s_!dPez!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 1272w, https://substackcdn.com/image/fetch/$s_!dPez!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dPez!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png" width="1456" height="1150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1150,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:366084,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://merill.substack.com/i/160304240?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dPez!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 424w, https://substackcdn.com/image/fetch/$s_!dPez!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 848w, https://substackcdn.com/image/fetch/$s_!dPez!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 1272w, https://substackcdn.com/image/fetch/$s_!dPez!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31dd5027-5cdc-43ee-acbd-68db5c514576_2428x1918.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128640; I just launched my weekend hack project &#129419;. With Twitter becoming unusable a whole heap of the Microsoft community is now on Bluesky and having a blast.</p><p>I made <a href="https://bluesky.ms">Bluesky.ms</a> to make it easy to find each other. If you are already on Bluesky, add your profile so others can find you.</p><p>If you haven&#8217;t started on Bluesky here&#8217;s a primer.</p><h2>&#129419; What is Bluesky?</h2><p>Bluesky is a social app that is designed to not be controlled by a single company. It&#8217;s an open network and a version of social media where it&#8217;s built by many people, and it still comes together as a cohesive, easy-to-use experience.</p><h2>&#9989; Where do I sign up</h2><ul><li><p>Web &#8594; <a href="https://bsky.social">Bluesky Web app</a></p></li><li><p>iPhone &#8594; <a href="https://apps.apple.com/us/app/bluesky-social/id6444370199">Bluesky iOS app</a></p></li><li><p>Android &#8594; <a href="https://play.google.com/store/apps/details?id=xyz.blueskyweb.app&amp;hl=en">Bluesky Android app</a></p></li></ul><h2>&#128640; How do I find people?</h2><p>Rebuilding all the folks you know or finding people with similar interests take time. Here are some neat ways to bootstrap the process.</p><h3>&#9989; Starter Packs</h3><p>These are lists of Bluesky users that you can bulk follow. The starter packs help you quickly get started on Bluesky and follow folks in the Microsoft community.</p><p>See <a href="https://bluesky.ms/starterpacks">bluesky.ms/starterpacks</a> for the latest list.</p><p>You can also find other non-Microsoft starter packs over at <a href="https://blueskydirectory.com/starter-packs">blueskydirectory.com/starter-packs</a></p><p>&#9989; Help others find you</p><p>If you write about Microsoft content and want others to find you, add your profile over at <a href="https://bluesky.ms">bluesky.ms</a>.</p><p>This crowd sourced database welcomes everyone. If you find it&#8217;s missing anyone please feel free to add them in.</p><p>Let&#8217;s build some awesome open communities!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Graph API: Minimal permissions to read user group membership]]></title><description><![CDATA[Here&#8217;s an interesting question I received today.]]></description><link>https://blog.merill.net/p/graph-api-minimal-permissions-for-user-group-data</link><guid isPermaLink="false">https://blog.merill.net/p/graph-api-minimal-permissions-for-user-group-data</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Tue, 10 Sep 2024 08:00:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d79a4cb2-052b-4c8c-aee3-987cd4f6e228_1616x992.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here&#8217;s an interesting question I received today.</p><blockquote><p>What are the minimal permissions required to read group membership for a user?</p></blockquote><p>The ask was for an application so we need to grant Application permissions and the first attempt was with <a href="https://graphpermissions.merill.net/permission/User.Read.All"><code>User.Read.All</code></a> permission.</p><p>When you run this query you do get the groups the user is a member of but it is limited to just the group id. The permission is not enough to get the name of the group.</p><pre><code>Invoke-GraphRequest -Uri 'https://graph.microsoft.com/v1.0/users/merill@elapora.com/memberOf/microsoft.graph.group?$select=displayName' | ConvertTo-Json
</code></pre><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mpJY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mpJY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 424w, https://substackcdn.com/image/fetch/$s_!mpJY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 848w, https://substackcdn.com/image/fetch/$s_!mpJY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 1272w, https://substackcdn.com/image/fetch/$s_!mpJY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mpJY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;screenshot showing querying by group member with user.read permission&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="screenshot showing querying by group member with user.read permission" title="screenshot showing querying by group member with user.read permission" srcset="https://substackcdn.com/image/fetch/$s_!mpJY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 424w, https://substackcdn.com/image/fetch/$s_!mpJY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 848w, https://substackcdn.com/image/fetch/$s_!mpJY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 1272w, https://substackcdn.com/image/fetch/$s_!mpJY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ef475f-9f6b-473f-8482-d0545c8c5a5b_1616x992.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Now this would be perfectly valid if your app needed just the ID of the group.</p><p>However if the app needs the name and other details of the group then you will need to grant additional permissions.</p><p>My immediate thought was to grant <a href="https://graphpermissions.merill.net/permission/Group.Read.All">Group.Read.All</a> but this is a scary permissions, especially when it is an application permission. This will grant tenant wide access to read any information stored in a Group or Team. This includes files and messages in a channel.</p><p>So what&#8217;s the least privilege permission that will grant access to just the display name?</p><p>As of today, the answer is <a href="https://graphpermissions.merill.net/permission/GroupMember.Read.All"><code>GroupMember.Read.All</code></a> permission. The reason I say &#8220;as of today&#8221; is because the permissions are constantly being updated and new permissions are being added, so it is always a good idea to check the docs for the least privilege permissions. Since I did this frequently I built a site to easily show the least privilege permissions <a href="https://graphpermissions.merill.net/">Microsoft Graph permissions reference</a>.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Dv_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Dv_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 424w, https://substackcdn.com/image/fetch/$s_!5Dv_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 848w, https://substackcdn.com/image/fetch/$s_!5Dv_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 1272w, https://substackcdn.com/image/fetch/$s_!5Dv_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Dv_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;screenshot showing querying by group member with user.read permission&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="screenshot showing querying by group member with user.read permission" title="screenshot showing querying by group member with user.read permission" srcset="https://substackcdn.com/image/fetch/$s_!5Dv_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 424w, https://substackcdn.com/image/fetch/$s_!5Dv_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 848w, https://substackcdn.com/image/fetch/$s_!5Dv_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 1272w, https://substackcdn.com/image/fetch/$s_!5Dv_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe777cc5-9b31-4ef1-8fe7-b86093c28356_1616x992.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a>]]></content:encoded></item><item><title><![CDATA[Filtering members in Entra groups and admin units]]></title><description><![CDATA[Here&#8217;s a recent Graph query-related issue I helped troubleshoot.]]></description><link>https://blog.merill.net/p/property-does-not-exist-as-declared-property</link><guid isPermaLink="false">https://blog.merill.net/p/property-does-not-exist-as-declared-property</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Mon, 22 Jul 2024 07:03:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e2d2a5d2-8262-49ca-878e-a662419f008f_2754x1138.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here&#8217;s a recent Graph query-related issue I helped troubleshoot.</p><p>The request was to find all the members in an Administrative Unit with a specific value in the <code>extensionAttribute10</code> property.</p><p>However this query errored out as an unsupported query.</p><p>&#10060;</p><pre><code>/directory/administrativeUnits/&lt;guid&gt;/members?$filter=onPremisesExtensionAttributes/extensionAttribute10 eq 'ABC'&amp;$count=true

code: "Request_UnsupportedQuery",
message: "Property 'extensionAttribute10' does not exist as a declared property or extension property."
</code></pre><p>The fix was fairly simple, just add <code>/microsoft.graph.user</code> at the end of the url path.</p><p>&#9989;</p><pre><code>/directory/administrativeUnits/&lt;guid&gt;/members/microsoft.graph.user?$filter=onPremisesExtensionAttributes/extensionAttribute10 eq 'ABC'&amp;$count=true
</code></pre><p>So let&#8217;s break down the fix.</p><p>Adding <code>/microsoft.graph.user</code> at the end of url path tells Graph API to only return members that are of type <code>user</code>. You can then apply all the available user object property filters including filtering by <code>extensionAttribute10</code>.</p><p>Why did the original query fail?</p><p>The <code>administrativeUnit</code> object like the <code>group</code> object can contain different types of directory objects.</p><p>Here&#8217;s a visual representation of the directory object inheritance hierarchy.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QyFC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QyFC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 424w, https://substackcdn.com/image/fetch/$s_!QyFC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 848w, https://substackcdn.com/image/fetch/$s_!QyFC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!QyFC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QyFC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Illustration showing directory object inheritance hierarchy with the DirectoryObject base type and child types&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Illustration showing directory object inheritance hierarchy with the DirectoryObject base type and child types" title="Illustration showing directory object inheritance hierarchy with the DirectoryObject base type and child types" srcset="https://substackcdn.com/image/fetch/$s_!QyFC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 424w, https://substackcdn.com/image/fetch/$s_!QyFC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 848w, https://substackcdn.com/image/fetch/$s_!QyFC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!QyFC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c019d7-be1a-4921-bad5-e2f3b4a554ec_2754x1138.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><p>When you create a group or an administrative unit, you can add users, devices, and other groups to it. Each of these objects will have their unique set of properties.</p><blockquote><p>Not all object types inheriting from <code>DirectoryObject</code> can be added to groups and administrative units.</p></blockquote><p>When you query for members in a group or an administrative unit, you are querying against all the objects in the container.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i6BP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i6BP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 424w, https://substackcdn.com/image/fetch/$s_!i6BP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 848w, https://substackcdn.com/image/fetch/$s_!i6BP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 1272w, https://substackcdn.com/image/fetch/$s_!i6BP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i6BP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot of an Entra group that contains users, groups and devices&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of an Entra group that contains users, groups and devices" title="Screenshot of an Entra group that contains users, groups and devices" srcset="https://substackcdn.com/image/fetch/$s_!i6BP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 424w, https://substackcdn.com/image/fetch/$s_!i6BP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 848w, https://substackcdn.com/image/fetch/$s_!i6BP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 1272w, https://substackcdn.com/image/fetch/$s_!i6BP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd05ba6b8-6031-47a5-8531-c63ca75724a4_940x746.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><p>So while you can query against special properties like <code>id</code> and <code>displayName</code> you cannot directly query against any of the other properties.</p><p>This explains why a query for <code>displayName</code> will work without qualifying the query with the object type.</p><p>&#9989;</p><pre><code>/groups/&lt;guid&gt;/members?$filter=displayName eq 'John'&amp;$count=true
</code></pre><p>In our original query, not all the member object types in the <code>administrativeUnit</code> object would have a declared property called <code>onPremisesExtensionAttributes</code>. Instead it is a declared property of the <code>user</code> object.</p><p>Once you qualify the query to filter by the <code>microsoft.graph.user</code> object, the query works as expected.</p><p>To close it off with another example, this query for <code>groups</code> will fail for the same reason.</p><p>&#10060;</p><pre><code>/groups/&lt;guid&gt;/members?$filter=onPremisesExtensionAttributes/extensionAttribute10 eq 'ABC'&amp;$count=true
</code></pre><p>Which can be fixed by qualifying the query with the <code>microsoft.graph.user</code> object type.</p><p>&#9989;</p><pre><code>/groups/&lt;guid&gt;/members/microsoft.graph.user?$filter=onPremisesExtensionAttributes/extensionAttribute10 eq 'ABC'&amp;$count=true
</code></pre><p>Here&#8217;s the TLDR;</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ThIn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ThIn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 424w, https://substackcdn.com/image/fetch/$s_!ThIn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 848w, https://substackcdn.com/image/fetch/$s_!ThIn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!ThIn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ThIn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;alt text&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="alt text" title="alt text" srcset="https://substackcdn.com/image/fetch/$s_!ThIn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 424w, https://substackcdn.com/image/fetch/$s_!ThIn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 848w, https://substackcdn.com/image/fetch/$s_!ThIn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!ThIn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc10efeba-dcec-4004-a684-d8e72b1d1960_1200x1500.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><p>Hope this helps!</p>]]></content:encoded></item><item><title><![CDATA[Invoke-MgGraphRequest -OutputFilePath vs Out-File Performance Comparison]]></title><description><![CDATA[In case you were wondering which is faster.]]></description><link>https://blog.merill.net/p/invoke-mgraphrequest-savefile-performance-comparison</link><guid isPermaLink="false">https://blog.merill.net/p/invoke-mgraphrequest-savefile-performance-comparison</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Mon, 22 Jul 2024 07:03:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mHD5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6937aa19-d8c3-42ce-a596-80c5b98bfb11_1260x660.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In case you were wondering which is faster.</p><pre><code>Invoke-GraphRequest -Uri 'beta/users' -OutputFilePath ./user.json</code></pre><p>or</p><pre><code>Invoke-GraphRequest -Uri 'beta/users' | Out-File -FilePath ./user.json</code></pre><p>Surprisingly, the answer is that Out-File is the fastest</p><p>Here&#8217;s what I got when I ran the two commands:</p><pre><code>Measure-Command { Invoke-GraphRequest -Uri 'beta/users' -OutputFilePath ./user.json }

TotalSeconds      : 3.1084942
</code></pre><pre><code>
Invoke-GraphRequest -Uri 'beta/users' | Out-File -FilePath ./user.json

TotalSeconds      : 0.5016927
</code></pre><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/RMQAj/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6937aa19-d8c3-42ce-a596-80c5b98bfb11_1260x660.png&quot;,&quot;thumbnail_url_full&quot;:&quot;&quot;,&quot;height&quot;:190,&quot;title&quot;:&quot;Invoke-MgGraphRequest Export Perf (in seconds)&quot;,&quot;description&quot;:&quot;Lower is faster.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/RMQAj/1/" width="730" height="190" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p></p><p>That got me thinking. Does the performance change much when using different output types?</p><pre><code>Measure-Command { Invoke-GraphRequest -Uri 'beta/users' -OutputType Json | Out-File ./user.json }

TotalSeconds      : 0.4035508
</code></pre><p>Here&#8217;s what I get when I ran the same command with different output types. There was no clear winner and they all ranged between 0.2 and 0.5 seconds.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/7S0sy/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4304b96d-034e-4f47-a793-8129df93d8b1_1260x660.png&quot;,&quot;thumbnail_url_full&quot;:&quot;&quot;,&quot;height&quot;:237,&quot;title&quot;:&quot;Performance in seconds&quot;,&quot;description&quot;:&quot;Invoke-MgGraphRequest -Out-File Types Comparison&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/7S0sy/1/" width="730" height="237" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div>]]></content:encoded></item><item><title><![CDATA[Device filter > Device platform]]></title><description><![CDATA[When designing a conditional access policy and have the choice between using device filter and device platform always use device filter.]]></description><link>https://blog.merill.net/p/device-filter-device-platform</link><guid isPermaLink="false">https://blog.merill.net/p/device-filter-device-platform</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Wed, 23 Aug 2023 13:12:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/44f17961-0da3-4051-a089-b19d14224583_1736x1774.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When designing a conditional access policy and have the choice between using device filter and device platform always use device filter.</p><p>The catch is that device filter can only be applied to managed or hybrid joined devices.</p><p>It&#8217;s a limitation since you can&#8217;t use it with unmanaged devices, but that is exactly the reason why it is better to use it over device platform when your CA policy is targeting managed devices.</p><p>The device platform relies on the user agent string which can be easily spoofed. Nicola has a good write up on this over at <a href="https://tech.nicolonsky.ch/bypassing-conditional-access-device-platform-policies/">Bypassing Conditional Access Device Platform Policies</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7dLV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7dLV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7dLV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7dLV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7dLV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7dLV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;He man skeleton recommends using device filter over device platform&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="He man skeleton recommends using device filter over device platform" title="He man skeleton recommends using device filter over device platform" srcset="https://substackcdn.com/image/fetch/$s_!7dLV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7dLV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7dLV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7dLV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5743b6fd-886f-468f-a056-3b9281d2d564_1736x1774.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Azure AD multi-tenant app vs single tenant app]]></title><description><![CDATA[I&#8217;ve recently noticed that Azure AD admins are being asked to create multi-tenant apps in their corporate tenant.]]></description><link>https://blog.merill.net/p/azure-ad-multi-tenant-app-vs-single-tenant-app</link><guid isPermaLink="false">https://blog.merill.net/p/azure-ad-multi-tenant-app-vs-single-tenant-app</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Mon, 03 Apr 2023 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f45fa32c-2080-43ef-be2c-9c59698dca8d_2970x2186.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve recently noticed that Azure AD admins are being asked to create multi-tenant apps in their corporate tenant.</p><p>In some instances, it was the devs in the org asking for this, in other instances it was the application vendor.</p><p>Here are some things to watch out for &#128071;</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5FHu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5FHu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5FHu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5FHu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5FHu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5FHu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5FHu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5FHu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5FHu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5FHu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8be163ab-3239-4363-a372-055b6d522700_2970x2186.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Multi-tenant apps are meant for ISVs and SaaS vendors to create an instance of an app in &#8216;their own tenant&#8217;. Examples of such apps are ServiceNow and SalesForce.</p><p>When an app is created as a multi-tenant app, ANY user from ANY Azure AD tenant can visit the app&#8217;s url and sign in.</p><p>If you create a multi-tenant app in your corporate tenant and apply a conditional access policy. The policy only applies to users and guests in your tenant.</p><p>&#9888;&#65039; I&#8217;ll repeat &#10143; your CA policies do not apply to users signing into your multi-tenant app in their own tenant.</p><p>So, what is the general rule of thumb that Azure AD admins and cybersecurity teams should follow?</p><p>If the app is from a vendor/SaaS provider:</p><p>&#9989; Add the app to your tenant from the Azure AD Application Gallery</p><p>&#9989; If the app is not in the gallery, you as the customer can request the vendor to get their app listed on the Azure AD app gallery</p><p>&#9989; If app gallery is not an option, request the vendor to create the app in their own tenant. Use the admin consent model to add the app to your tenant.</p><p>&#9989; If the only option provided by the vendor is to create the app in your tenant, push for the vendor to allow you to create a single tenant app.</p><p>If the app is developed by devs in your org and is only meant for users in your own org.</p><p>&#9989; Ask why the dev needs this to be a multi-tenant app?</p><p>&#9989; Ask if the devs have implemented appropriate checks to prevent sign-ins from other tenants.</p><p>There are many valid scenarios for creating multi-tenant apps in your tenant, including</p><p>&#9989; You are a SaaS vendor or ISV and you create and publish apps that Azure AD customers can consume</p><p>&#9989; You manage multiple Azure AD tenants in your org and you need a single service principle (workload identity) to access the other tenants (e.g. automate DevOps tasks across your tenants)</p><p>Here are some further reading on the topic of multi-tenancy. These are meant for devs however its good reading for admins to appreciate what it takes to build a least-privilege multitenant app.</p><p>&#128073; <a href="https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/" title="https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/">https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/</a></p><p>&#128073; <a href="https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/" title="https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/">https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-convert-app-to-be-multi-tenant</a></p><p>Note: This MSRC blog post provides additional guidance on how you can review the multi-tenant apps in your tenant and switch them to a single tenant app if multi-tenant is not a requirement.</p><p><a href="https://msrc.microsoft.com/blog/2023/03/guidance-on-potential-misconfiguration-of-authorization-of-multi-tenant-applications-that-use-azure-ad/">Guidance on Potential Misconfiguration of Authorization of Multi-Tenant Applications that use Azure AD - MSRC Blog - Microsoft Security Response Center</a></p>]]></content:encoded></item><item><title><![CDATA[Use a custom app for Graph PowerShell delegate access]]></title><description><![CDATA[If you want to follow the least privilege model for the applications in your Azure AD tenant, you might be concerned about consenting to many permissions scopes to the Microsoft Graph PowerShell app over time.]]></description><link>https://blog.merill.net/p/microsoft-graph-powershell-delegate-app</link><guid isPermaLink="false">https://blog.merill.net/p/microsoft-graph-powershell-delegate-app</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Thu, 02 Mar 2023 10:39:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1385faf4-8f0f-4d6a-bd7f-2fbb7503e806_1748x1960.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you want to follow the least privilege model for the applications in your Azure AD tenant, you might be concerned about consenting to many permissions scopes to the Microsoft Graph PowerShell app over time.</p><p>To avoid this, you can register your own app for use with Microsoft Graph PowerShell. This allows you to have more granular control.</p><p>Here are the steps to go about setting it up.</p><ul><li><p>Browse to <strong>Entra</strong> &gt; <strong>App registrations</strong> <a href="https://adappreg.cmd.ms">[adappreg.cmd.ms]</a> &gt; <strong>New Registration</strong></p><ul><li><p><strong>Name:</strong> Microsoft Graph PowerShell - High Privilege admin use only (&lt;- Give a meaningful name)</p></li><li><p><strong>Account type:</strong> Accounts in this organization directory</p></li><li><p><strong>Redirect URI:</strong></p><ul><li><p>Select <strong>Public client/native</strong> from the drop down</p></li><li><p><strong>Uri:</strong> http://localhost</p></li></ul></li><li><p>Click <strong>Create</strong></p></li></ul></li></ul><p>That&#8217;s it!</p><p>Now you can use this app instead of the default one by connecting with</p><pre><code>Connect-MgGraph -ClientId &lt;Your new app clientid&gt; -TenantId &lt;your tenant id&gt;
</code></pre><p>Here are a few screenshots to help guide you.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6fNY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6fNY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 424w, https://substackcdn.com/image/fetch/$s_!6fNY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 848w, https://substackcdn.com/image/fetch/$s_!6fNY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 1272w, https://substackcdn.com/image/fetch/$s_!6fNY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6fNY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot showing how the app should be created&quot;,&quot;title&quot;:&quot;Microsoft Graph PowerShell app configuration&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot showing how the app should be created" title="Microsoft Graph PowerShell app configuration" srcset="https://substackcdn.com/image/fetch/$s_!6fNY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 424w, https://substackcdn.com/image/fetch/$s_!6fNY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 848w, https://substackcdn.com/image/fetch/$s_!6fNY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 1272w, https://substackcdn.com/image/fetch/$s_!6fNY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca6866a-7cc4-4eff-8428-7deff56e4b7e_1748x1960.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Remember to use the ClientId and TenantId parameters when signing in.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IjK2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IjK2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 424w, https://substackcdn.com/image/fetch/$s_!IjK2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 848w, https://substackcdn.com/image/fetch/$s_!IjK2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 1272w, https://substackcdn.com/image/fetch/$s_!IjK2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IjK2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot signing in with the new app in PowerShell&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot signing in with the new app in PowerShell" title="Screenshot signing in with the new app in PowerShell" srcset="https://substackcdn.com/image/fetch/$s_!IjK2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 424w, https://substackcdn.com/image/fetch/$s_!IjK2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 848w, https://substackcdn.com/image/fetch/$s_!IjK2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 1272w, https://substackcdn.com/image/fetch/$s_!IjK2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d02dea2-44ff-44b5-8fc0-8296532b0bef_1990x1268.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><h2>Restricted user access</h2><p>I would also recommend limiting the users that have access to these Graph PowerShell applications. To do this browse to the Enterprise Applications [adapps.cmd.ms](https://adapps.cmd.ms] blade, select the app and in Properties set <strong>Assignment required?</strong> to <strong>Yes</strong>. Then grant access to the required folks from the <strong>Users</strong> blade.</p><h2>Windows PowerShell 5.1</h2><p>The steps above will get you working with PowerShell 7, which is what you SHOULD be using. In the unfortunate event that you are stuck with Windows PowerShell 5.1 you need to do one more thing.</p><ul><li><p>Open the app you just created in <strong>App registrations</strong> <a href="https://adappreg.cmd.ms">[adappreg.cmd.ms]</a></p></li><li><p>Select <strong>Authentication</strong></p><ul><li><p>Check <strong>https://login.microsoftonline.com/common/oauth2/nativeclient</strong></p></li><li><p>Click <strong>Save</strong></p></li></ul></li></ul>]]></content:encoded></item><item><title><![CDATA[Entra ID and Microsoft Graph Extensions and Attributes]]></title><description><![CDATA[A comparison of the five different types of Microsoft Azure AD + Graph extensions and attributes.]]></description><link>https://blog.merill.net/p/entra-id-extensions-and-attributes</link><guid isPermaLink="false">https://blog.merill.net/p/entra-id-extensions-and-attributes</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Thu, 09 Feb 2023 22:39:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ONax!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ca993c1-6e11-491b-8bf8-4d3500959f0d_1260x660.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This table is a comparison of the five different types of Microsoft Entra ID + Graph extensions and attributes.</p><p>I created this view since the Microsoft docs don&#8217;t include all this information in a single view (especially the Custom Security Attributes).</p><p>Source: <strong><a href="https://learn.microsoft.com/en-us/graph/extensibility-overview?tabs=http#comparison-of-extension-types">Comparison of extension types - Microsoft Learn</a> </strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/oZn6t/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ca993c1-6e11-491b-8bf8-4d3500959f0d_1260x660.png&quot;,&quot;thumbnail_url_full&quot;:&quot;&quot;,&quot;height&quot;:2239,&quot;title&quot;:&quot;Microsoft 365 Attributes&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/oZn6t/1/" width="730" height="2239" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p></p><p><sup>1</sup> Multi-value support in directory extensions is limited to attributes synchronized from on-prem. It is not possible to create new multi-valued directory extensions in Azure AD.</p>]]></content:encoded></item><item><title><![CDATA[Azure AD Shortcuts]]></title><description><![CDATA[NOTE: Check out https://cmd.ms. The new and improved version of this.]]></description><link>https://blog.merill.net/p/azure-ad-shortcuts</link><guid isPermaLink="false">https://blog.merill.net/p/azure-ad-shortcuts</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Fri, 07 Oct 2022 20:27:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R9IJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6dd8d66-4832-4513-bed7-8dbf2e9bb706_871x871.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>NOTE: Check out <a href="https://cmd.ms">https://cmd.ms</a>. The new and improved version of this.</p><p>I&#8217;m a command line guy and hate having to click to get to various Azure AD pages. Over time I created these shortcuts and thought you might find them helpful.</p><p>Here is how it works. Open a new tab and type <a href="https://aka.ms/ad/list">aka.ms/ad/{command}</a></p><p>Where shortcut is one of the commands below.</p><p>aka.ms Command Portal Blade <a href="https://aka.ms/ad/ca">aka.ms/ad/ca</a> ca Conditional Access <a href="https://aka.ms/ad/pim">aka.ms/ad/pim</a> pim Privileged Identity Management <a href="https://aka.ms/ad/users">aka.ms/ad/users</a> users Users <a href="https://aka.ms/ad/groups">aka.ms/ad/groups</a> groups Groups <a href="https://aka.ms/ad/devices">aka.ms/ad/devices</a> devices Devices <a href="https://aka.ms/ad/apps">aka.ms/ad/apps</a> apps Enterprise Applications <a href="https://aka.ms/ad/appreg">aka.ms/ad/appreg</a> appreg Application Registrations <a href="https://aka.ms/ad/auth">aka.ms/ad/auth</a> auth Authentication Methods Policies <a href="https://aka.ms/ad/legacymfa">aka.ms/ad/legacymfa</a> legacymfa Legacy MFA <a href="https://aka.ms/ad/guests">aka.ms/ad/guests</a> guests Guest Access Settings <a href="https://aka.ms/ad/logs">aka.ms/ad/logs</a> logs Sign in Logs <a href="https://aka.ms/ad/xtap">aka.ms/ad/xtap</a> xtap Cross Tenant Access Settings <a href="https://aka.ms/ad/roles">aka.ms/ad/roles</a> roles Azure AD Roles <a href="https://aka.ms/ad/sspr">aka.ms/ad/sspr</a> sspr Password Reset <a href="https://aka.ms/ad/security">aka.ms/ad/security</a> security Security <a href="https://aka.ms/ad/mfaunblock">aka.ms/ad/mfaunblock</a> mfaunblock MFA Unblock <a href="https://aka.ms/ad/reviews">aka.ms/ad/reviews</a> reviews Access Reviews <a href="https://aka.ms/ad/score">aka.ms/ad/score</a> score Secure Score <a href="https://aka.ms/ad/license">aka.ms/ad/license</a> license Licenses <a href="https://aka.ms/ad/synclog">aka.ms/ad/synclog</a> synclog AAD Connect Sync Errors <a href="https://aka.ms/ad/adfslog">aka.ms/ad/adfslog</a> adfslog ADFS Log <a href="https://aka.ms/ad/consent">aka.ms/ad/consent</a> consent Consents and Permissions <a href="https://aka.ms/ad/support">aka.ms/ad/support</a> support Support <a href="https://aka.ms/ad/list">aka.ms/ad/list</a> list List all these shortcuts</p><p>If you liked those here are some of my favourite Identity related shortcuts.</p><p>aka.ms Page <a href="https://aka.ms/azad">aka.ms/azad</a> Azure AD Portal <a href="https://aka.ms/sspr">aka.ms/sspr</a> Self Service Password Reset <a href="https://aka.ms/myapps">aka.ms/mysecurity</a> My Security <a href="https://aka.ms/myapps">aka.ms/myapps</a> My Apps <a href="https://aka.ms/my-account">aka.ms/my-account</a> My Account <a href="https://aka.ms/my-groups">aka.ms/my-groups</a> My Groups <a href="https://aka.ms/my-access">aka.ms/my-access</a> My Access Packages <a href="https://aka.ms/mystaff">aka.ms/mystaff</a> My Access Packages <a href="https://aka.ms/mfasetup">aka.ms/mfasetup</a> Alternative for My Security <a href="https://aka.ms/ge">aka.ms/ge</a> Graph Explorer <a href="https://aka.ms/in">aka.ms/ge</a> Intune</p><p>Have I missed anything? Have new suggestions? Let me know at <a href="https://twitter.com/merill">twitter.com/merill</a>.</p>]]></content:encoded></item><item><title><![CDATA[Graph PowerShell Conversion Analyzer]]></title><description><![CDATA[Hey folks, I took part in a hackathon last week and built the Graph PowerShell Conversion Analyzer.]]></description><link>https://blog.merill.net/p/graph-powershell-conversion-analyzer</link><guid isPermaLink="false">https://blog.merill.net/p/graph-powershell-conversion-analyzer</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Mon, 25 Apr 2022 20:27:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d2565f72-0a5d-448f-a137-58a7dc476ecf_2098x764.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wBu8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wBu8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 424w, https://substackcdn.com/image/fetch/$s_!wBu8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 848w, https://substackcdn.com/image/fetch/$s_!wBu8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 1272w, https://substackcdn.com/image/fetch/$s_!wBu8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wBu8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot of Graph PowerShell Analyzer&quot;,&quot;title&quot;:&quot;https://graphpowershell.merill.net&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of Graph PowerShell Analyzer" title="https://graphpowershell.merill.net" srcset="https://substackcdn.com/image/fetch/$s_!wBu8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 424w, https://substackcdn.com/image/fetch/$s_!wBu8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 848w, https://substackcdn.com/image/fetch/$s_!wBu8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 1272w, https://substackcdn.com/image/fetch/$s_!wBu8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4849a677-95e7-46e6-930d-f9da603bc870_2098x764.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Hey folks, I took part in a hackathon last week and built the Graph PowerShell Conversion Analyzer. Hopefully, this will help a bit as you upgrade your AzureAD &amp; MSOnline PowerShell scripts to Graph PowerShell.</p><p>It&#8217;s very rough right now but I would love to hear your feedback.</p><p>Try it out at <strong><a href="https://graphpowershell.merill.net" title="https://graphpowershell.merill.net">https://graphpowershell.merill.net</a></strong></p><p>You start by pasting in one of your old scripts that you want to upgrade to Graph PowerShell and clicking the <strong>Analyze</strong> button.</p><p>This will generate a report of all the Azure AD PowerShell and MSOnline commands that were found along with a mapping to its corresponding Graph PowerShell command. The sample generated will try to map the parameters to the new command.</p><p>This is where I still need to do a lot more work to make it really useful.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AFgw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AFgw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AFgw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AFgw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AFgw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AFgw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot of Analysis Report&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of Analysis Report" title="Screenshot of Analysis Report" srcset="https://substackcdn.com/image/fetch/$s_!AFgw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AFgw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AFgw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AFgw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2a93c9-406f-4148-9271-8d1dcc11fdd5_2152x2038.jpeg 1456w" sizes="100vw"></picture><div></div></div></a><p>Where possible you also get direct links to both the Graph PowerShell command reference as well as the Graph API reference (which usually has more relevant info).</p><p>No more hunting around and searching the docs!</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bqeu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bqeu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Bqeu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Bqeu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Bqeu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bqeu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot showing links to the docs&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot showing links to the docs" title="Screenshot showing links to the docs" srcset="https://substackcdn.com/image/fetch/$s_!Bqeu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Bqeu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Bqeu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Bqeu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcb5205-fa90-4144-92f8-3aad76d2a3bd_1922x704.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><p>The last bit is where you the community can really help us and each other out. We&#8217;ve started an open repository of sample Graph PowerShell scripts at <strong><a href="https://aka.ms/graphsamples" title="https://aka.ms/graphsamples">https://aka.ms/graphsamples</a></strong></p><p>We would love to make this the largest collection of Graph PowerShell sample scripts. It&#8217;s open to everyone to contribute so please share your scripts (even one-liners).</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vFP2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vFP2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vFP2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vFP2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vFP2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vFP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot of the Graph samples community&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of the Graph samples community" title="Screenshot of the Graph samples community" srcset="https://substackcdn.com/image/fetch/$s_!vFP2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vFP2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vFP2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vFP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b413418-4e6f-48ff-b825-c1b03b53eceb_2240x2150.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><p>Let me know what you think. If you have any ideas on how this can be improved I&#8217;m all ears!</p>]]></content:encoded></item><item><title><![CDATA[Get-MgUser_List1: Expect simple name=value query, but observe property ‘assignedLicenses’ of complex type ‘AssignedLicense’.]]></title><description><![CDATA[Are you seeing this message when trying to get user license information using the Graph API.]]></description><link>https://blog.merill.net/p/get-mguser_list1-expect-simple-name-value-query-but-observe-property-assignedlicenses-of-complex-type-assignedlicense</link><guid isPermaLink="false">https://blog.merill.net/p/get-mguser_list1-expect-simple-name-value-query-but-observe-property-assignedlicenses-of-complex-type-assignedlicense</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Fri, 15 Apr 2022 22:27:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R9IJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6dd8d66-4832-4513-bed7-8dbf2e9bb706_871x871.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you seeing this message when trying to get user license information using the Graph API.</p><p>_Expect simple name=value query, but observe property &#8216;assignedLicenses&#8217; of complex type &#8216;AssignedLicense&#8217;.</p><pre><code>    &#10095; Get-MgUser -Filter 'assignedLicenses/$count eq 0'
    Get-MgUser_List1: Expect simple name=value query, but observe property 'assignedLicenses' of complex type 'AssignedLicense'.
</code></pre><p>The fix is quite simple. Set the ConsistencyLevel header to <strong>eventual</strong> and pass in a variable to store the count of the result set and you are good to go.</p><pre><code>    &#10095; Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable licensedUserCount -All
    
    Id                                   DisplayName     Mail                           UserPrincipalName
    --                                   -----------     ----                           -----------------
    1468b68b-8536-4bc5-ab1f-6014175b836d merill-fdo      merill-fdo@yopmail.net         merill-fdo_yopmail.net#E&#8230;
    160f8064-a20c-4236-bdf4-3393003e916b Ezra Brand      ezra@fdo.net                   ezra_fdo.net#EXT#@pora.n&#8230;
    37e5a3d1-f92b-4a12-bb35-91bf80969810 Joshua Sal      user2@fakedomain.com           user2_fakedomain.com#EXT&#8230;
    5c8537e4-7d7f-4920-a921-382d91fa53fd Fake Damain     user@fakedomain.com            user_fakedomain.com#EXT#&#8230;
    640885de-9652-4fb2-8a87-963cc2f599a0 Chris Green     chris.green@yopmail.net        chris.green_yopmail.net#&#8230;
</code></pre>]]></content:encoded></item><item><title><![CDATA[Azure AD Nudge (Authenticator registration campaign) failing to prompt users]]></title><description><![CDATA[Getting users to go to the aka.ms/mysecurityinfo page and set up the Authenticator app for MFA is not an easy task.]]></description><link>https://blog.merill.net/p/azure-ad-nudge-authenticator-registration-campaign-failing-to-prompt-users</link><guid isPermaLink="false">https://blog.merill.net/p/azure-ad-nudge-authenticator-registration-campaign-failing-to-prompt-users</guid><dc:creator><![CDATA[Merill Fernando]]></dc:creator><pubDate>Fri, 15 Apr 2022 20:27:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5fa59779-1a36-4134-ae10-24767a17dcc6_239x189.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Getting users to go to the <a href="">aka.ms/mysecurityinfo</a> page and set up the Authenticator app for MFA is not an easy task.</p><p>Azure AD&#8217;s &#8216;Nudge&#8217; feature allows you to run a <a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/how-to-mfa-registration-campaign">Microsoft Authenticator registration campaign</a> that interrupts a user signing in with SMS and nudges them to set up the Authenticator app.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CaIK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CaIK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 424w, https://substackcdn.com/image/fetch/$s_!CaIK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 848w, https://substackcdn.com/image/fetch/$s_!CaIK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 1272w, https://substackcdn.com/image/fetch/$s_!CaIK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CaIK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!CaIK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 424w, https://substackcdn.com/image/fetch/$s_!CaIK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 848w, https://substackcdn.com/image/fetch/$s_!CaIK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 1272w, https://substackcdn.com/image/fetch/$s_!CaIK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7fa250c-fc5d-4d82-aa0f-bdacba4ea86f_239x189.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>If you set this up but are not seeing users being nudged/prompted with the &#8216;Improve your sign-ins&#8217; message its most probably because you have a conditional access policy for the &#8216;Register security information&#8217; page.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U2Q6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U2Q6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 424w, https://substackcdn.com/image/fetch/$s_!U2Q6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 848w, https://substackcdn.com/image/fetch/$s_!U2Q6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 1272w, https://substackcdn.com/image/fetch/$s_!U2Q6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U2Q6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!U2Q6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 424w, https://substackcdn.com/image/fetch/$s_!U2Q6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 848w, https://substackcdn.com/image/fetch/$s_!U2Q6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 1272w, https://substackcdn.com/image/fetch/$s_!U2Q6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0985e47e-2981-4d60-b612-52c6392c2057_1236x922.png 1456w" sizes="100vw"></picture><div></div></div></a><p>The nudge screen will not be displayed if a user&#8217;s sign in is in scope of a conditional access policy that blocks access to the &#8220;Register security information&#8221; page.</p><p>Let&#8217;s take for example you have a conditional access policy that blocks users from accessing the &#8216;Register security information&#8217; page over the internet and limits access to your company&#8217;s corporate (local area network).</p><p>When a user tries signing in over the internet and uses SMS they will not be shown the nudge (Improve your sign-ins) screen.</p><p>Let&#8217;s say for arguments sake if Azure AD were to send them to the page where they can set up security info. If we allowed the user to set up new auth methods it would bypass your conditional access policy defined above. Alternatively, it wouldn&#8217;t be a pleasant experience if we redirected the user to the nudge screen and then showed them a CA policy error when they tried to set up a new auth method.</p><p>Instead, we simply avoid showing the nudge prompt if the current sign-in is not in scope for the &#8216;Register security info&#8217; conditional access policy.</p><p>Hope that makes sense.</p>]]></content:encoded></item></channel></rss>