<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Mathieu Beaugrand&apos;s Blog</title>
        <description>Sharing practical insights on End User Computing (EUC) and modern workplace technologies.</description>
        <link>https://blog2.beaugtech.com/</link>
        <atom:link href="https://blog2.beaugtech.com/feed.xml" rel="self" type="application/rss+xml"/>
        <pubDate>Tue, 14 Apr 2026 04:59:05 +0000</pubDate>
        <lastBuildDate>Tue, 14 Apr 2026 04:59:05 +0000</lastBuildDate>
        <generator>Jekyll v3.10.0</generator>
        
            <item>
                <title>Azure Lab Services retirement - Choosing the right EUC platform for what comes next</title>
                <description>&lt;p&gt;The retirement of Azure Lab Services isn’t just another platform change. Azure Lab Services didn’t just provide infrastructure, it removed complexity. Its retirement doesn’t just remove a service. It puts that complexity back on you. It’s a forcing function to rethink how organisations deliver training environments, proof-of-concept platforms, and secure, repeatable desktop experiences.&lt;/p&gt;

&lt;p&gt;For years, Azure Lab Services provided something rare in the cloud world: &lt;strong&gt;Simplicity with control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now, with its &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/lab-services/retirement-guide&quot;&gt;retirement scheduled for June 2027&lt;/a&gt;, that simplicity is gone, and organisations are being pushed toward new architectures and Microsoft acknowledges there is no like-for-like replacement.&lt;/p&gt;

&lt;p&gt;Microsoft’s guidance is clear:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Move to Azure Virtual Desktop (AVD)&lt;/li&gt;
  &lt;li&gt;Complement it with tools like Nerdio for management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s the real question: &lt;strong&gt;Are you replacing a service… or redesigning your entire EUC platform?&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;from-simplicity-to-assembled-solutions&quot;&gt;From simplicity to assembled solutions&lt;/h2&gt;

&lt;p&gt;Azure Lab Services abstracted complexity:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Provisioning was simple&lt;/li&gt;
  &lt;li&gt;Lifecycle was controlled&lt;/li&gt;
  &lt;li&gt;Environments were repeatable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In contrast, the recommended AVD + Nerdio approach is not a single solution. It’s a composition of Azure infrastructure, the AVD control plane, and a management layer like Nerdio, each solving part of the problem, but none owning the full experience.&lt;/p&gt;

&lt;p&gt;The shift is subtle but significant: you move from &lt;strong&gt;consuming a platform&lt;/strong&gt; to &lt;strong&gt;managing an ecosystem&lt;/strong&gt;. This is where &lt;strong&gt;Omnissa Horizon Cloud&lt;/strong&gt; differentiates itself, not as an add-on, but as a &lt;strong&gt;complete platform&lt;/strong&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-application-lifecycle-app-packaging-vs-image-sprawl&quot;&gt;1. Application lifecycle: App packaging vs image sprawl&lt;/h2&gt;

&lt;p&gt;In AVD environments, application delivery typically relies on golden images, MSIX app attach (Low app compatibilty), and packaging pipelines, often resulting in image sprawl and complex update cycles.&lt;/p&gt;

&lt;p&gt;With Horizon Cloud, &lt;strong&gt;App Volumes&lt;/strong&gt; fundamentally changes the model. What App Volumes enables:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Real-time app attachment at app launch&lt;/li&gt;
  &lt;li&gt;Separation of apps from the golden image&lt;/li&gt;
  &lt;li&gt;Instant updates without recomposing desktops&lt;/li&gt;
  &lt;li&gt;Minimal golden image footprint (often 1–2 images)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is architectural simplification, not just operational improvement.&lt;/strong&gt; Nerdio can optimise image management. It cannot replace true application lifecycle.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-user-profiles-dem-vs-profile-containers&quot;&gt;2. User profiles: DEM vs profile containers&lt;/h2&gt;

&lt;p&gt;User state is one of the hardest problems in EUC, and one of the most visible when it goes wrong. Typical AVD approaches include:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;FSLogix profile containers&lt;/li&gt;
  &lt;li&gt;Policies and scripting&lt;/li&gt;
  &lt;li&gt;Intune-based configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These provide persistence, but limited control. With Horizon Cloud, &lt;strong&gt;Dynamic Environment Manager (DEM)&lt;/strong&gt; delivers:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Policy-driven user environment management&lt;/li&gt;
  &lt;li&gt;Context-aware configuration (device, location, role)&lt;/li&gt;
  &lt;li&gt;Granular application settings&lt;/li&gt;
  &lt;li&gt;Fast, consistent logon/logoff experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;FSLogix stores profiles, DEM controls the user experience.&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-user-experience-performance--access-not-one-or-the-other&quot;&gt;3. User experience: Performance + Access, not one or the other&lt;/h2&gt;

&lt;p&gt;User experience isn’t just about performance, it’s about how users connect, authenticate, and interact with their digital workspace. It’s defined by two equally important factors:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;How users access their applications&lt;/li&gt;
  &lt;li&gt;How those applications perform once connected&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most platforms focus on one. A mature EUC platform delivers both. This is where &lt;strong&gt;Omnissa Horizon Cloud&lt;/strong&gt; differentiates itself.&lt;/p&gt;

&lt;h3 id=&quot;31-the-access-layer-a-true-digital-front-door&quot;&gt;3.1 The access layer: A true digital front door&lt;/h3&gt;

&lt;p&gt;Before performance even matters, users need a simple, consistent way to access their workspace. In AVD environments, access is typically spread across:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Remote Desktop clients&lt;/li&gt;
  &lt;li&gt;Web portals&lt;/li&gt;
  &lt;li&gt;Multiple authentication entry points&lt;/li&gt;
  &lt;li&gt;Azure-native conditional access layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While functional, this often leads to fragmented access experiences, multiple user journeys and increased login friction. With Horizon Cloud, &lt;strong&gt;Omnissa Access&lt;/strong&gt; provides a unified digital front door, delivering:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;A single portal for all apps and desktops&lt;/li&gt;
  &lt;li&gt;Consistent experience across browser, mobile, and desktop&lt;/li&gt;
  &lt;li&gt;Integrated authentication (including MFA and conditional access)&lt;/li&gt;
  &lt;li&gt;Unified access to SaaS, web, and virtual applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This provides a unique user experience, offering one place to go for everything, fewer prompts and context switches and a consistent experience regardless of device, location and whether workloads are running in the cloud or on-prem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Users don’t need to know where their apps live. They just know where to go.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-04-01-Azurelab-replacement/Access-hub.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;32-the-performance-layer-blast-extreme&quot;&gt;3.2 The performance layer: Blast Extreme&lt;/h3&gt;

&lt;p&gt;Once connected, performance becomes the defining factor of user experience. AVD relies primarily on Remote Desktop Protocol (RDP). While it has improved, it still presents limitations:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Less adaptability in variable network conditions&lt;/li&gt;
  &lt;li&gt;Limited optimisation for multimedia and graphics workloads&lt;/li&gt;
  &lt;li&gt;Reduced control over protocol behaviour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Horizon Cloud introduces &lt;strong&gt;Blast Extreme&lt;/strong&gt;, a purpose-built display protocol designed for modern workloads. Key advantages:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Adaptive transport (intelligent UDP/TCP switching)&lt;/li&gt;
  &lt;li&gt;Strong performance in high-latency or low-bandwidth conditions&lt;/li&gt;
  &lt;li&gt;Optimised for video, audio, and GPU-intensive workloads&lt;/li&gt;
  &lt;li&gt;Fine-grained tuning for bandwidth, quality, and responsiveness&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;33-bringing-it-together-end-to-end-user-experience&quot;&gt;3.3 Bringing it together: End-to-End user experience&lt;/h3&gt;

&lt;p&gt;Most solutions treat access and performance as separate concerns. Horizon Cloud integrates both into a single experience:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Omnissa Access → how users connect&lt;/li&gt;
  &lt;li&gt;Blast Extreme → how applications perform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining a digital front door with a high-performance protocol, Horizon Cloud helps:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Simplify how users connect&lt;/li&gt;
  &lt;li&gt;Optimise how applications perform&lt;/li&gt;
  &lt;li&gt;Deliver a consistent experience across any environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The result is not just a working session. It’s a consistent, low-friction digital workspace experience.&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-integrated-stack-vs-layered-tooling&quot;&gt;4. Integrated stack vs layered tooling&lt;/h2&gt;

&lt;p&gt;With AVD + Nerdio, you are combining multiple layers:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Azure&lt;/li&gt;
  &lt;li&gt;AVD&lt;/li&gt;
  &lt;li&gt;Nerdio&lt;/li&gt;
  &lt;li&gt;FSLogix&lt;/li&gt;
  &lt;li&gt;Additional third party tooling for apps and policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each solves part of the problem. None own the full experience. With Horizon Cloud, everything is built-in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;App lifecycle (App Volumes)&lt;/li&gt;
  &lt;li&gt;User environment (DEM)&lt;/li&gt;
  &lt;li&gt;Protocol (Blast)&lt;/li&gt;
  &lt;li&gt;Brokering and access control&lt;/li&gt;
  &lt;li&gt;Image lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;One platform. One control plane. One operational model.&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-lab--training-use-cases-where-it-all-comes-together&quot;&gt;5. Lab &amp;amp; training use cases: Where it all comes together&lt;/h2&gt;

&lt;p&gt;Azure Lab Services worked because it delivered:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Repeatability&lt;/li&gt;
  &lt;li&gt;Isolation&lt;/li&gt;
  &lt;li&gt;Simplicity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recreating this with AVD requires:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Careful architecture&lt;/li&gt;
  &lt;li&gt;Multiple tools&lt;/li&gt;
  &lt;li&gt;Ongoing operational effort&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Horizon Cloud enables:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Rapid provisioning from clean images&lt;/li&gt;
  &lt;li&gt;Stateless or semi-persistent desktops&lt;/li&gt;
  &lt;li&gt;Consistent environments across sessions&lt;/li&gt;
  &lt;li&gt;Simple reset and rebuild cycles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Much closer to the original Lab Services experience, without sacrificing enterprise capability.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-future-proofing-your-euc-strategy-hybrid-by-design-not-by-exception&quot;&gt;6. Future-proofing your EUC strategy: Hybrid by design, not by exception&lt;/h2&gt;

&lt;p&gt;One of the most overlooked questions is: &lt;strong&gt;What happens when your requirements move beyond Azure?&lt;/strong&gt; Because they will. AVD is inherently Azure-centric. If requirements evolve, whether due to data sovereignty, mergers, or edge use cases, organisations are often forced into redesign rather than extension.&lt;/p&gt;

&lt;p&gt;For example, a University may run training labs in Azure today, but require on-prem deployment for research environments with sensitive data tomorrow.&lt;/p&gt;

&lt;h3 id=&quot;61-horizon-cloud-built-for-hybrid-from-day-one&quot;&gt;6.1. Horizon Cloud: Built for hybrid from day one&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Omnissa Horizon Cloud&lt;/strong&gt; takes a different approach. It is inherently hybrid, allowing you to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Deploy in Azure today&lt;/li&gt;
  &lt;li&gt;Extend to on-premises tomorrow&lt;/li&gt;
  &lt;li&gt;Expand into other cloud providers&lt;/li&gt;
  &lt;li&gt;Maintain consistency across all environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach enables true flexibility, allowing workloads to run where they make the most sense, whether in Azure, on-premises, or across multiple clouds, while maintaining a consistent architecture and reducing dependency on a single provider.&lt;/p&gt;

&lt;h3 id=&quot;62-the-bottom-line&quot;&gt;6.2 The bottom line&lt;/h3&gt;
&lt;p&gt;Microsoft’s recommendation of AVD + Nerdio is logical from an ecosystem perspective. But it optimises for Azure alignment, not necessarily best-in-class EUC capability.&lt;/p&gt;

&lt;p&gt;AVD + Nerdio:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Assembles a solution&lt;/li&gt;
  &lt;li&gt;Relies on multiple layers&lt;/li&gt;
  &lt;li&gt;Lacks depth in key EUC functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Omnissa Horizon Cloud delivers those capabilities natively, within a single platform.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;7-final-thought&quot;&gt;7. Final thought&lt;/h2&gt;

&lt;p&gt;Azure Lab Services didn’t just provide infrastructure. It delivered:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Simplicity&lt;/li&gt;
  &lt;li&gt;Control&lt;/li&gt;
  &lt;li&gt;Repeatability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rebuilding that with AVD + Nerdio is possible, but it comes at the cost of:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Complexity&lt;/li&gt;
  &lt;li&gt;Fragmentation&lt;/li&gt;
  &lt;li&gt;Operational overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a moment to do more than replace. It’s a moment to rethink. Because the real decision isn’t “What replaces Azure Lab Services?” It’s &lt;strong&gt;“What EUC platform do we want to standardise on for the next 5 years?&lt;/strong&gt;”&lt;/p&gt;

&lt;p&gt;If you optimise for short-term alignment, AVD + Nerdio will get you there.&lt;/p&gt;

&lt;p&gt;If you optimise for capability, consistency, and future flexibility, &lt;strong&gt;Horizon Cloud&lt;/strong&gt; isn’t just an alternative. It’s the stronger long-term strategy.&lt;/p&gt;

&lt;p&gt;So in short, if AVD + Nerdio is a solution you assemble, Horizon Cloud is a platform you standardise on.&lt;/p&gt;
</description>
                <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2026-04-01-Azurelab-replacement</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2026-04-01-Azurelab-replacement</guid>
                
                <category>Azure</category>
                
                <category>Horizon</category>
                
                <category>App</category>
                
                <category>DEM</category>
                
                
            </item>
        
            <item>
                <title>Enhance your Google Chrome security with Chrome Enterprise</title>
                <description>&lt;p&gt;Today, the majority of enterprise applications are accessed through a web browser rather than a thick client. As a result, &lt;strong&gt;the browser has effectively become the new endpoint&lt;/strong&gt;, making browser security more critical than ever.&lt;/p&gt;

&lt;p&gt;In parallel, we’ve seen a growing adoption of &lt;strong&gt;Enterprise Browsers&lt;/strong&gt;, driven by the need for improved visibility, control, and data protection, especially in hybrid and BYOD environments.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk through how to configure &lt;strong&gt;Google Chrome Enterprise&lt;/strong&gt;, the most widely used browser globally, to provide enterprise-grade security and management. Importantly, this approach works regardless of whether the device itself is corporate managed or personally owned.&lt;/p&gt;

&lt;p&gt;The good news is that you don’t need to be a full Google Workspace customer to get started. &lt;strong&gt;Chrome Enterprise Core&lt;/strong&gt; is completely free and provides strong foundational controls. For organisations requiring advanced security features such as &lt;strong&gt;malware scanning&lt;/strong&gt;, &lt;strong&gt;Data Loss Prevention (DLP)&lt;/strong&gt;, and &lt;strong&gt;real-time URL protection&lt;/strong&gt;, &lt;strong&gt;Chrome Enterprise Premium&lt;/strong&gt; is available as an upgrade.&lt;/p&gt;

&lt;p&gt;You can compare Chrome Enterprise Core and Premium features on Google’s official comparison page:
&lt;a href=&quot;https://chromeenterprise.google/intl/en_au/products/chrome-enterprise-premium/&quot;&gt;https://chromeenterprise.google/intl/en_au/products/chrome-enterprise-premium/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;1-google-admin-console&quot;&gt;1. Google Admin Console&lt;/h2&gt;

&lt;h3 id=&quot;11-registration&quot;&gt;1.1 Registration&lt;/h3&gt;
&lt;p&gt;If your organisation already uses Google services, access to the &lt;strong&gt;Google Admin Console&lt;/strong&gt; likely already exists. In that case, contact your Google Workspace &lt;strong&gt;Super Admin&lt;/strong&gt; to request access.&lt;/p&gt;

&lt;p&gt;If your organisation is new to Google services, you’ll need to create a new Google Admin account.&lt;br /&gt;
It’s strongly recommended to use a &lt;strong&gt;shared mailbox or alias&lt;/strong&gt; (ie. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;google.admin@yourdomain.com&lt;/code&gt;) rather than an individual account.&lt;/p&gt;

&lt;p&gt;To register, visit the Chrome Enterprise sign-up page: &lt;a href=&quot;https://enterprise.google.com/signup/chromeos/email?origin=ceutrial&quot;&gt;https://enterprise.google.com/signup/chromeos/email?origin=ceutrial&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;12-domain-verification&quot;&gt;1.2 Domain verification&lt;/h3&gt;
&lt;p&gt;Domain verification ensures no one else can register services using your organisation’s domain.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Login to your &lt;a href=&quot;https://admin.google.com&quot;&gt;Google Admin Console&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Go to &lt;strong&gt;Account &amp;gt; Domains &amp;gt; Manage Domains&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;Verify domain&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;Copy the &lt;strong&gt;TXT record&lt;/strong&gt; provided&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Open a new browser tab and login to your domain registrar
    &lt;ul&gt;
      &lt;li&gt;Add a new TXT record with the value copied earlier&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Go back to your Google Admin Console tab and click &lt;strong&gt;Confirm&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Domain.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;13-licenses&quot;&gt;1.3 Licenses&lt;/h3&gt;
&lt;p&gt;To unlock Chrome Enterprise features:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Billing &amp;gt; Subscriptions&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select &lt;strong&gt;Buy or upgrade&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At a minimum, add:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Chrome Enterprise Core&lt;/strong&gt; (Free)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cloud Identity Free&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For advanced security capabilities, add:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Chrome Enterprise Upgrade&lt;/strong&gt; (Paid)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some vendors bundle Chrome Enterprise Premium into their offerings. For example, &lt;a href=&quot;https://www.omnissa.com/insights/blog/omnissa-one-2025-amsterdam-google-chrome-enterprise-premium-secure-browser&quot;&gt;Omnissa Secure Access Suite&lt;/a&gt; includes Chrome Enterprise Premium as part of the solution, so reach out to your Omnissa representative if you prefer to procure it that way. Buying the &lt;strong&gt;Omnissa Secure Access Suite&lt;/strong&gt; instead of Chrome Enterprise Premium alone delivers secure browser access as part of a &lt;strong&gt;full, identity-driven Digital Workspace&lt;/strong&gt;, including Hub Experience &amp;amp; Unified AppCatalog, modern VPN via Workspace ONE Tunnel, conditional access through Omnissa Access, and robust BYOD support. It also lays the foundation for an &lt;strong&gt;Autonomous Workspace&lt;/strong&gt; journey, unifying security, access, and user experience under a single intelligent platform.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Licenses.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;14-services-review&quot;&gt;1.4 Services review&lt;/h3&gt;
&lt;p&gt;Before synchronising users, assess and restrict Google services to align with your security and governance requirements.&lt;/p&gt;

&lt;p&gt;Navigate to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Apps &amp;gt; Google Workspace &amp;gt; Service status&lt;/strong&gt;, and&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Apps &amp;gt; Additional Google services&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disable unnecessary services to reduce exposure and complexity.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Apps.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-user-synchronisation&quot;&gt;2. User synchronisation&lt;/h2&gt;
&lt;p&gt;Google Workspace supports several ways to synchronise users, and the right approach depends on your identity provider. In this case, I’ll use &lt;strong&gt;SCIM provisioning&lt;/strong&gt; from Entra ID to Google Workspace via the native integration in the Google Admin Console.&lt;/p&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Note:&lt;/strong&gt; At the time of writing, this integration is in &lt;em&gt;beta&lt;/em&gt;.
Alternatively, you can use the &lt;a href=&quot;https://learn.microsoft.com/en-us/entra/identity/saas-apps/g-suite-provisioning-tutorial&quot;&gt;Google Cloud / G Suite Connector by Microsoft&lt;/a&gt; app from the Entra ID app gallery.&lt;/p&gt;

&lt;h3 id=&quot;21-scim-configuration&quot;&gt;2.1 SCIM configuration&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Login to your &lt;a href=&quot;https://admin.google.com&quot;&gt;Google Admin Console&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Go to &lt;strong&gt;Directory &amp;gt; Directory sync&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;Add Azure Active Directory&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Give it a name then click &lt;strong&gt;Authorise and Save&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;You will get redirected to Entra ID for authentication
    &lt;ul&gt;
      &lt;li&gt;Note that you will require to authenticate with a Global Admin account in order to authorise the integration&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Accept the &lt;strong&gt;Google Directory Sync&lt;/strong&gt; app creation in Entra ID&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;SCIM Add&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;SCIM Authorise&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-Add.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-Add.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-Authorise.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-Authorise.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;22-user-sync&quot;&gt;2.2 User sync&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Under the &lt;strong&gt;User sync&lt;/strong&gt; section, click &lt;strong&gt;Set up user sync&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;User Scope
        &lt;ul&gt;
          &lt;li&gt;Use a user based Entra ID security group
            &lt;ul&gt;
              &lt;li&gt;Nested groups do not seem to work in this scenario&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Copy the name of your Entra ID group and paste it into the field&lt;/li&gt;
          &lt;li&gt;Click &lt;strong&gt;Verify&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Organizational unit (OU) selection
        &lt;ul&gt;
          &lt;li&gt;Select &lt;strong&gt;Place users in a specific OU&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Click on &lt;strong&gt;Select organizational unit&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Then select the top level OU of your domain&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;User attribute mapping
        &lt;ul&gt;
          &lt;li&gt;Map the user attributes as per your requirements
            &lt;ul&gt;
              &lt;li&gt;&lt;a href=&quot;https://support.google.com/a/answer/10344342?hl=en#step2&amp;amp;zippy=step-map-the-user-attributes&quot;&gt;Common user attribute mappings&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Account activation
        &lt;ul&gt;
          &lt;li&gt;Select &lt;strong&gt;Don’t send activation email&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Deprovisioning
        &lt;ul&gt;
          &lt;li&gt;Click &lt;strong&gt;Suspend user in Google Directory&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Safeguards
        &lt;ul&gt;
          &lt;li&gt;Set the safeguard as per your requirements&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;User scope&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;OU&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;User attributes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-User.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-User.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-OU.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-OU.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserAttributes.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserAttributes.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;User activation&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;User decommission&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;User safeguard&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserActivation.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserActivation.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserDecom.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserDecom.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserSafeguard.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-UserSafeguard.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;23-group-sync&quot;&gt;2.3 Group sync&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Under the &lt;strong&gt;Group sync&lt;/strong&gt; section, click &lt;strong&gt;Set up group sync&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;Synchronising groups will allow you to assign different Chrome policies based on user groups (ie. Executives vs Staff)&lt;/li&gt;
      &lt;li&gt;Group scope
        &lt;ul&gt;
          &lt;li&gt;Select &lt;strong&gt;Sync selected groups&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Copy the name of your Entra ID group and paste it into the field&lt;/li&gt;
          &lt;li&gt;Click &lt;strong&gt;Verify&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Note that for a group to sync, the group must be a mail-enabled security group (see required group attributes below)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Required attributes
        &lt;ul&gt;
          &lt;li&gt;Leave the default values&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Deprovisioning
        &lt;ul&gt;
          &lt;li&gt;Click &lt;strong&gt;Delete group in your Google Directory&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Safeguards
        &lt;ul&gt;
          &lt;li&gt;Set the safeguard as per your requirements&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Group scope&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Group attributes&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Group decommission&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Group safeguard&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-Group.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-Group.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-GroupAttributes.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-GroupAttributes.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-GroupDecom.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-GroupDecom.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-GroupSafeguard.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SCIM-GroupSafeguard.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-single-sign-on-sso-and-federation&quot;&gt;3. Single Sign-On (SSO) and federation&lt;/h2&gt;
&lt;p&gt;Now that Google accounts are in place, the next consideration is user authentication. Fortunately, Google Workspace supports federation with most Identity Providers (IdP) using &lt;strong&gt;SAML or OIDC&lt;/strong&gt;, allowing users to sign in using &lt;strong&gt;SSO&lt;/strong&gt; rather than remembering another password.
If you’re using &lt;strong&gt;Microsoft Entra ID&lt;/strong&gt; as your primary IdP, this is even easier, as Google Workspace is natively federated with Entra ID via the pre-built OIDC profile.&lt;/p&gt;

&lt;p&gt;If using another IdP:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;strong&gt;Security &amp;gt; Authentication &amp;gt; SSO with third-party IdP&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Create an SSO profile&lt;/li&gt;
  &lt;li&gt;Assign it to an OU or user group&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-SSO.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-google-chrome-configuration&quot;&gt;4. Google Chrome configuration&lt;/h2&gt;

&lt;h3 id=&quot;41-chrome-enterprise-core&quot;&gt;4.1 Chrome Enterprise Core&lt;/h3&gt;
&lt;p&gt;Now let’s look at the foundation of your Chrome configuration.&lt;/p&gt;

&lt;h4 id=&quot;411-reporting&quot;&gt;4.1.1 Reporting&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Chrome browsers &amp;gt; Settings&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select your top OU&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;User &amp;amp; browser settings&lt;/strong&gt; tab search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;report&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Configure the following reporting policies:
    &lt;ul&gt;
      &lt;li&gt;Managed browser reporting: &lt;strong&gt;Enable managed browser cloud reporting&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Event reporting: &lt;strong&gt;Enable event reporting&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Managed profile reporting: &lt;strong&gt;Enable managed profile reporting for managed users&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Managed browser reporting upload frequency: &lt;strong&gt;4 hours&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Device token management: &lt;strong&gt;Delete token&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Settings1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;412-safe-browsing&quot;&gt;4.1.2 Safe browsing&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Under the &lt;strong&gt;User &amp;amp; browser settings&lt;/strong&gt; tab search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe browsing&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Configure the following Safe Browsing policies:
    &lt;ul&gt;
      &lt;li&gt;Safe Browsing protection: Set the “Safe Browsing Protection Level” configuration to &lt;strong&gt;enhanced mode&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Disable bypassing Safe Browsing warnings: &lt;strong&gt;Do not allow users to bypass Safe Browsing warning&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Allow download deep scanning for Safe Browsing-enabled users: &lt;strong&gt;Enable Safe Browsing download deep scans&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Download restrictions: &lt;strong&gt;Block malicious downloads&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Settings2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;413-third-party-device-trust-connector-optional&quot;&gt;4.1.3 Third party device trust connector (optional)&lt;/h4&gt;
&lt;p&gt;If your Identity Provider (IdP) supports device trust signals, integrating Google Chrome Enterprise enables context-aware access decisions based on browser trust. Chrome provides device signals such as managed browser status and disk encryption posture, allowing your IdP to enforce conditional access policies accordingly.&lt;/p&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Chrome Enterprise Device Trust integration enables security posture verification for &lt;strong&gt;ChromeOS&lt;/strong&gt;, &lt;strong&gt;Windows&lt;/strong&gt;, and &lt;strong&gt;macOS&lt;/strong&gt; devices.&lt;/p&gt;

&lt;p&gt;In this example, I’ll walk through the integration using Omnissa Access as the IdP. Google Chrome Enterprise also supports integrations with other identity providers that offer device trust capabilities.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Login to your Omnissa Access tenant&lt;/li&gt;
  &lt;li&gt;Go to &lt;strong&gt;Integrations &amp;gt; Authentication Methods&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Click on &lt;strong&gt;Google Chrome Enterprise Device Signals&lt;/strong&gt; adapter&lt;/li&gt;
  &lt;li&gt;Enable the authentication method&lt;/li&gt;
  &lt;li&gt;Copy the &lt;strong&gt;URLs matcher&lt;/strong&gt; &amp;amp; &lt;strong&gt;IDP service account&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;You will need those details later on in the Google Admin console&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Configure the device signals as per your requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;box-note&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Device signals that can be collected via &lt;strong&gt;Managed browser&lt;/strong&gt; or &lt;strong&gt;Managed profile&lt;/strong&gt; include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Disk Encryption:&lt;/strong&gt; This signal checks whether the device&apos;s hard drive or SSD is encrypted. Only devices with an active main disk encryption will be granted access.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Firewall Status:&lt;/strong&gt; This signal checks whether the device firewall is enabled. Devices will not be granted access if their firewall is in a disabled state.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Screen Lock Secured:&lt;/strong&gt; This signal checks whether the device&apos;s screen lock is secured. Only devices with an enabled screen lock will be granted access.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Auth Methods&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Chrome adapter&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Access-AuthMethod.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Access-AuthMethod.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Access-ChromeAdapter.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Access-ChromeAdapter.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure the device trust connector in the Google Admin console:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Login to your &lt;a href=&quot;https://admin.google.com&quot;&gt;Google Admin Console&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Go to &lt;strong&gt;Chrome browser &amp;gt; Connectors&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;+ New provider configuration&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Find your IdP, then click &lt;strong&gt;Set up&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Paste the &lt;strong&gt;URLs matcher&lt;/strong&gt; and &lt;strong&gt;service account&lt;/strong&gt; details copied from Omnissa Access&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;Add configuration&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Assign the connector configuration to the appropriate OU&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Connector&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Config&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Assign&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Connector.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Connector.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-ConnectorConfig.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-ConnectorConfig.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-ConnectorAssign.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-ConnectorAssign.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Configure your conditional access policy:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Login to your Omnissa Access tenant&lt;/li&gt;
  &lt;li&gt;Go to &lt;strong&gt;Resources &amp;gt; Policies&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Create a new policy or edit an existing one&lt;/li&gt;
  &lt;li&gt;Configure the policy based on your access requirements
    &lt;ul&gt;
      &lt;li&gt;Device type: &lt;strong&gt;Windows 10+&lt;/strong&gt; or &lt;strong&gt;macOS&lt;/strong&gt; or &lt;strong&gt;Chrome OS&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Add &lt;strong&gt;Google Chrome Enterprise Device Signals&lt;/strong&gt; as a second authentication method&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Access-Policy.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With this configuration in place, Chrome will continuously send device trust signals to Omnissa Access during authentication. These signals can then be evaluated in real time to enforce access controls.&lt;/p&gt;

&lt;p&gt;For example, you could:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Allow access to your CRM or SaaS applications only from managed Chrome browsers (managed browser &amp;amp; managed profile)&lt;/li&gt;
  &lt;li&gt;Block access from unmanaged browsers, even if the user credentials are valid&lt;/li&gt;
  &lt;li&gt;Combine browser trust with other signals such as user, network, or risk level&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;42-chrome-extensions&quot;&gt;4.2 Chrome extensions&lt;/h3&gt;
&lt;p&gt;Managing browser extensions effectively is essential to maintaining a secure browser environment, as extensions can introduce significant security and data exposure risks if left unmanaged.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Chrome browsers &amp;gt; Apps &amp;amp; extensions&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;Users &amp;amp; browsers&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;Select the appropriate OU or Group for assignment&lt;/li&gt;
  &lt;li&gt;Add and configure the Chrome extensions as per your requirements, for example:
    &lt;ul&gt;
      &lt;li&gt;Endpoint Verification extension
        &lt;ul&gt;
          &lt;li&gt;Click the “&lt;strong&gt;+&lt;/strong&gt;” icon and select &lt;strong&gt;Add Chrome app or extension by ID&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Extension ID: &lt;strong&gt;callobklhcbilhphinckomhgkigmfocg&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Installation policy: &lt;strong&gt;Force install + pin to browser toolbar&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Secure Enterprise Browser extension:
        &lt;ul&gt;
          &lt;li&gt;Click the “&lt;strong&gt;+&lt;/strong&gt;” icon and select &lt;strong&gt;Add Chrome app or extension by ID&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Extension ID: &lt;strong&gt;ekajlcmdfcigmdbphhifahdfjbkciflj&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Installation policy: &lt;strong&gt;Force install + pin to browser toolbar&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Extension1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Once you have visibility into which extensions are being used across your environment, you can make an informed decision on how to manage them moving forward—typically by enforcing either an &lt;strong&gt;allowlist&lt;/strong&gt; or &lt;strong&gt;blocklist&lt;/strong&gt; using the settings below.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Chrome browsers &amp;gt; Apps &amp;amp; extensions&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;Settings&lt;/strong&gt; tab&lt;/li&gt;
  &lt;li&gt;Select the appropriate OU or Group for assignment&lt;/li&gt;
  &lt;li&gt;Click on the &lt;strong&gt;Allow/block mode&lt;/strong&gt; policy
    &lt;ul&gt;
      &lt;li&gt;Play store: &lt;strong&gt;Block all apps, admin manages allowlist&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Chrome Web Store: &lt;strong&gt;Block all apps, admin manages allowlist, users may request extensions&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;43-chrome-enterprise-premium&quot;&gt;4.3 Chrome Enterprise Premium&lt;/h3&gt;
&lt;p&gt;Chrome Enterprise Premium provides a wide range of advanced configuration capabilities. In this section, I’ll focus on establishing a small set of foundational policies, but you’re encouraged to explore the 500+ additional policies available to further tailor the solution to your requirements.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Chrome browsers &amp;gt; Settings&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select the appropriate OU or Group for assignment&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;User &amp;amp; browser settings&lt;/strong&gt; tab search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;connector&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Configure content connector and URL check policies:
    &lt;ul&gt;
      &lt;li&gt;Upload content analysis: &lt;strong&gt;Chrome Enterprise Premium&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Additional settings
        &lt;ul&gt;
          &lt;li&gt;Delay file upload: &lt;strong&gt;Delay the transfer until the analysis is complete&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;Block file transfer on failure: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Check for sensitive data: &lt;strong&gt;On by default, except for the following locations&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;User justifications to bypass: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Check for malware: &lt;strong&gt;On by default, except for the following locations&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;User justifications to bypass: &lt;strong&gt;Disable&lt;/strong&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Password protected files: &lt;strong&gt;Allow&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Files larger than 50MB: &lt;strong&gt;Allow&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repeat the above process for the following connector policies:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Download content analysis&lt;/li&gt;
  &lt;li&gt;Bulk text content analysis
    &lt;ul&gt;
      &lt;li&gt;Minimum character count: 30&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Print content analysis&lt;/li&gt;
  &lt;li&gt;Real time URL check&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enable advanced data protection features:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Security &amp;gt; Access and data control &amp;gt; Data protection&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;Data protection settings&lt;/strong&gt; section
    &lt;ul&gt;
      &lt;li&gt;Data insights scanning and report: &lt;strong&gt;On&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-deployment-models&quot;&gt;5. Deployment models&lt;/h2&gt;
&lt;p&gt;Chrome supports two management modes:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Managed browser&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Managed profile&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Device-level management&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;User-based management&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Ideal for corporate managed devices&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Ideal for unmanaged devices and contractors&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Policies apply even without user sign-in&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Activated when the user signs in to Chrome&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;More information:
&lt;a href=&quot;https://support.google.com/chrome/a/answer/15591684&quot;&gt;https://support.google.com/chrome/a/answer/15591684&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;51-managed-browser&quot;&gt;5.1 Managed browser&lt;/h3&gt;

&lt;h4 id=&quot;511-enrolment-token&quot;&gt;5.1.1 Enrolment token&lt;/h4&gt;
&lt;p&gt;To configure the managed browser option, you need to download the configuration file from your Google Admin Console.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Go to &lt;strong&gt;Chrome browsers &amp;gt; Managed browsers&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select the devices OU&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;Enroll&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Copy and/or download your token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Google-Token.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;512-windows-deployment&quot;&gt;5.1.2 Windows deployment&lt;/h4&gt;
&lt;p&gt;Deploy the enrolment token using your PCLM/UEM solution. In this instance I am leveraging Workspace ONE to deploy the configuration file.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Login to your Workspace ONE console&lt;/li&gt;
  &lt;li&gt;Go to &lt;strong&gt;Resources &amp;gt; Profiles&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;ADD&lt;/strong&gt; then &lt;strong&gt;Add Profile&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select &lt;strong&gt;Windows&lt;/strong&gt; then &lt;strong&gt;Device Profile&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select the &lt;strong&gt;Custom Settings&lt;/strong&gt; payload
    &lt;ul&gt;
      &lt;li&gt;Target: &lt;strong&gt;Workspace ONE Intelligent Hub&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Install Settings:&lt;/p&gt;

        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;lt;wap-provisioningdoc id=&quot;1164DF07-F217-449B-95F8-FB85A34D3CA5&quot; name=&quot;customprofile&quot;&amp;gt;/
  &amp;lt;characteristic type=&quot;com.airwatch.winrt.registryoperation&quot; uuid=&quot;4fa91319-eac0-4a16-9d10-093ba845b698&quot;&amp;gt;
   &amp;lt;parm RegistryPath=&quot;HKLM\SOFTWARE\Policies\Google\Chrome&quot; Action=&quot;Replace&quot;&amp;gt;
     &amp;lt;Value Name=&quot;CloudManagementEnrollmentToken&quot; Data=&quot;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&quot; Type=&quot;String&quot; /&amp;gt;
     &amp;lt;Value Name=&quot;CloudManagementEnrollmentMandatory&quot; Data=&quot;1&quot; Type=&quot;DWORD&quot; /&amp;gt;
   &amp;lt;/parm&amp;gt;
  &amp;lt;/characteristic&amp;gt;
  &amp;lt;/wap-provisioningdoc&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Remove Settings:&lt;/p&gt;

        &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;lt;wap-provisioningdoc id=&quot;1164DF07-F217-449B-95F8-FB85A34D3CA6&quot; name=&quot;customprofile&quot;&amp;gt;/
  &amp;lt;characteristic type=&quot;com.airwatch.winrt.registryoperation&quot; uuid=&quot;4fa91319-eac0-4a16-9d10-093ba845b698&quot;&amp;gt;
   &amp;lt;parm RegistryPath=&quot;HKLM\SOFTWARE\Policies\Google\Chrome&quot; Action=&quot;Remove&quot;&amp;gt;
     &amp;lt;Value Name=&quot;CloudManagementEnrollmentToken&quot; Data=&quot;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&quot; Type=&quot;String&quot; /&amp;gt;
     &amp;lt;Value Name=&quot;CloudManagementEnrollmentMandatory&quot; Data=&quot;1&quot; Type=&quot;DWORD&quot;/&amp;gt;
   &amp;lt;/parm&amp;gt;
  &amp;lt;/characteristic&amp;gt;
  &amp;lt;/wap-provisioningdoc&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;        &lt;/div&gt;
      &lt;/li&gt;
      &lt;li&gt;Save and Publish&lt;/li&gt;
      &lt;li&gt;Custom settings details are documented &lt;a href=&quot;https://support.google.com/chrome/a/answer/9793780&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/WS1-Profile.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;52-managed-profile&quot;&gt;5.2 Managed profile&lt;/h3&gt;
&lt;p&gt;No additional configuration is required for Chrome managed profiles, as management is automatically enabled when users create a Chrome profile and sign in with their managed Google account. Users simply need to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Create a Chrome profile&lt;/li&gt;
  &lt;li&gt;Sign in with their managed Google account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2026-01-15-Chrome-Enterprise/Chrome-Profile.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;53-confirm-enrolment&quot;&gt;5.3 Confirm enrolment&lt;/h3&gt;

&lt;p&gt;On your test device, restart the Chrome browser to trigger synchronisation. You can confirm successful enrolment in the Google Admin Console under &lt;strong&gt;Chrome browsers &amp;gt; Managed browsers&lt;/strong&gt; and/or &lt;strong&gt;Chrome browsers &amp;gt; Managed profiles&lt;/strong&gt;.
To verify that policies are applied on the device, open a new Chrome tab and navigate to chrome://policy.&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;6-user-experience&quot;&gt;6. User experience&lt;/h2&gt;
&lt;div class=&quot;video-container&quot;&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/e68Yihp3tE8?si=jQBDdKHzOS6m1V-B&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7-additional-resources&quot;&gt;7. Additional resources&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Chrome Enterprise training: &lt;a href=&quot;https://edu.exceedlms.com/student/collection/1771555&quot;&gt;https://edu.exceedlms.com/student/collection/1771555&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2026-01-15-Chrome-Enterprise</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2026-01-15-Chrome-Enterprise</guid>
                
                <category>Browser</category>
                
                <category>EntraID</category>
                
                <category>Workspace ONE</category>
                
                <category>Essential 8</category>
                
                
            </item>
        
            <item>
                <title>Workspace ONE Launcher with CICO, MSAL &amp; KAM</title>
                <description>&lt;p&gt;I was recently invited to present at a Samsung Expert training event to demonstrate how solutions from Omnissa seamlessly integrate with and enhance the capabilities of Samsung Knox. To support this presentation, I built a full demo environment showcasing how KME (Knox Mobile Enrollment), KSP (Knox Service Plugin), and KAM (Knox Authentication Manager) when combined with Workspace ONE create a powerful, end-to-end solution uniquely positioned to address frontline workforce needs.&lt;/p&gt;

&lt;p&gt;This solution is made up of several key components, each playing a critical role in enabling secure, efficient, and scalable device operations. Once configured, workers can simply “check out” a device at the start of their shift by login in, automatically receive the apps, policies, and permissions assigned to their role. When the shift ends, “checking in” the device clears personal data and returns it to a clean, ready-for-the-next-user state. This reduces device sprawl, ensures consistent user experiences, and maintains strong data privacy.&lt;/p&gt;

&lt;p&gt;The section below provides a high-level overview of the components making up the solutions, while the remainder of this blog will dive deeper into the configuration details.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Identity
    &lt;ul&gt;
      &lt;li&gt;On-premises Active Directory (AD) synchronised to EntraID via cloud sync&lt;/li&gt;
      &lt;li&gt;AirWatch Cloud Connector (ACC) deployed on-premises to synchronise users to Workspace ONE UEM&lt;/li&gt;
      &lt;li&gt;Access Cloud Connected deployed on-premises to synchronise users to Omnissa Access&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;Note that SCIM 2.0 can also be configured for cloud only deployment&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Knox
    &lt;ul&gt;
      &lt;li&gt;KME used to auto enrol devices to the designated Organisation Group (OG)&lt;/li&gt;
      &lt;li&gt;KAM used to simplify login experience
        &lt;ul&gt;
          &lt;li&gt;Auto populate username/password&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;KSP used to pre-configure settings&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Workspace ONE
    &lt;ul&gt;
      &lt;li&gt;Launcher used to create consistent experience and restrict access&lt;/li&gt;
      &lt;li&gt;Shared device mode with CICO (Check-in/Check-out)
        &lt;ul&gt;
          &lt;li&gt;Clear data and cache on logoff&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Workspace ONE UEM integrated with EntraID for device compliance and MSAL&lt;/li&gt;
      &lt;li&gt;Omnissa Access integrated with UEM and federated with EntraID&lt;/li&gt;
      &lt;li&gt;Workspace ONE Assist for remote view/control&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Mobile Threat Defense &lt;em&gt;(not documented in this blog post)&lt;/em&gt;
    &lt;ul&gt;
      &lt;li&gt;Activated within Hub automatically&lt;/li&gt;
      &lt;li&gt;Phishing and Content protection enforced
        &lt;ul&gt;
          &lt;li&gt;Blocking website categories such as Gambling, Violence…&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Horizon &lt;em&gt;(not documented in this blog post)&lt;/em&gt;
    &lt;ul&gt;
      &lt;li&gt;Horizon Cloud on Azure virtual desktops
        &lt;ul&gt;
          &lt;li&gt;Can be used for back office tasks&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Samsung DeX for simplified access to Windows 11 from a single device&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-knox-mobile-enrollment-kme&quot;&gt;1. Knox Mobile Enrollment (KME)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.samsungknox.com/admin/knox-mobile-enrollment/&quot;&gt;Knox Mobile Enrollment (KME)&lt;/a&gt; is a zero-touch provisioning service that streamlines the deployment of Samsung devices at scale. It allows IT teams to automatically enrol devices into Workspace ONE the moment they’re powered on, with minimal manual setup, staging, or user intervention required.&lt;/p&gt;

&lt;p&gt;Workspace ONE supports a number of &lt;a href=&quot;https://docs.omnissa.com/bundle/android-device-managementV2310/page/AndroidEnrollmentAdditionalEnrollmentFlags.html&quot;&gt;enrolment flags&lt;/a&gt; in addition to what KME offers, typically used to enhance and speed up the enrolment process.&lt;/p&gt;

&lt;p&gt;To create your KME profile, login to the &lt;a href=&quot;http://samsungknox.com/en&quot;&gt;Samsung Knox Admin portal&lt;/a&gt;, in the KME blade, select &lt;strong&gt;Profiles&lt;/strong&gt; and &lt;strong&gt;Create profile&lt;/strong&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;KME Profile&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;EMM info&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;DPC extra&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/KME-Profile.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/KME-Profile.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/KME-EMM.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/KME-EMM.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/KME-DPC.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/KME-DPC.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Additional flags used in the KME profile:&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;groupid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;your-groupid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;useUEMAuthentication&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;un&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;your-staging-username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;pw&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;your-staging-pwd&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With this configuration, the Samsung device automatically enrols into the designated OG using a multi-user staging account, and it authenticates through the Workspace ONE UEM authentication flow rather than Omnissa Access.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-knox-service-plugin-ksp&quot;&gt;2. Knox Service Plugin (KSP)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.samsungknox.com/admin/knox-platform-for-enterprise/knox-service-plugin/welcome/&quot;&gt;Knox Service Plugin (KSP)&lt;/a&gt; extends the capabilities of Samsung devices by exposing the full range of advanced management APIs available within the Samsung Knox framework. Delivered as a lightweight app, KSP allows Workspace ONE to configure and enforce deep device-level policies, such as hardware restrictions, security controls, app management, and kiosk behaviours, without requiring custom integrations or complex scripting.&lt;/p&gt;

&lt;p&gt;To create your KSP config, login to your Workspace ONE UEM console, go to &lt;strong&gt;Resources &amp;gt; Native Apps &amp;gt; Public&lt;/strong&gt;. Locate the KSP app (or import it via Google Managed Play if needed), &lt;strong&gt;Select&lt;/strong&gt; it and click &lt;strong&gt;Assign&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Assignment: &lt;em&gt;select-your-smart-group&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Delivery: &lt;strong&gt;Auto&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Restrictions - Managed Access: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Create an AppConfig
    &lt;ul&gt;
      &lt;li&gt;Knox license: &lt;em&gt;add-your-knox-license&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Device-wide policies
        &lt;ul&gt;
          &lt;li&gt;Enable device policy controls: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Application management policies
            &lt;ul&gt;
              &lt;li&gt;Enable application management controls: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
              &lt;li&gt;Battery optimization allowlist: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.airwatch.androidagent, com.airwatch.lockdown.launcher, com.airwatch.tunnel, com.samsung.android.knox.kam&lt;/code&gt;&lt;/li&gt;
              &lt;li&gt;Force Stop Blocklist: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.samsung.android.knox.kam&lt;/code&gt;&lt;/li&gt;
              &lt;li&gt;Package name for auto-launch: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.samsung.android.knox.kam/com.samsung.android.knox.kam.ui.SplashScreenActivity&lt;/code&gt;&lt;/li&gt;
              &lt;li&gt;Clear Cache Block List: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.samsung.android.knox.kam, com.samsung.android.knox.kpu&lt;/code&gt;&lt;/li&gt;
              &lt;li&gt;Clear Data Block List: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.samsung.android.knox.kam, com.samsung.android.knox.kpu&lt;/code&gt;&lt;/li&gt;
              &lt;li&gt;Enable Permission controls: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Permission Controls
        &lt;ul&gt;
          &lt;li&gt;Permission Policy: &lt;strong&gt;ALL&lt;/strong&gt;, Package: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.airwatch.lockdown.launcher/com.airwatch.lockdown.launcher&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;Permission Policy: &lt;strong&gt;ALL&lt;/strong&gt;, Package: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.airwatch.androidagent/com.airwatch.androidagent&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;Permission Policy: &lt;strong&gt;ALL&lt;/strong&gt;, Package: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.airwatch.tunnel/com.airwatch.tunnel&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;Permission Policy: &lt;strong&gt;ALL&lt;/strong&gt;, Package: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.airwatch.contentlocker/com.airwatch.contentlocker&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;Permission Policy: &lt;strong&gt;ALL&lt;/strong&gt;, Package: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.airwatch.rm.agent.cloud/com.airwatch.rm.agent.cloud&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;App Assign&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Distribution&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Restrictions&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-Assign.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-Assign.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-Distribution.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-Distribution.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-Restrictions.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-Restrictions.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;AppConfig&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Device Policy&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Permission controls&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-AppConfig.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-AppConfig.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-AppConfig-1.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-AppConfig-1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-AppConfig-2.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KSP-AppConfig-2.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;With this configuration in place, KSP ensures that KAM remains running at all times and that its app data is preserved during the check-in (log-off) process. It also prevents essential system applications from being put to sleep by Android’s battery optimisation features, maintaining a consistent and reliable user experience. Finally, it pre-configures required app permissions, reducing unnecessary notification prompts during device staging and speeding up the overall provisioning workflow.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-knox-authentication-manager-kam&quot;&gt;3. Knox Authentication Manager (KAM)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.samsungknox.com/admin/knox-authentication-manager/&quot;&gt;Knox Authentication Manager (KAM)&lt;/a&gt; is a managed, Android autofill service for shared, fully managed Samsung devices. Knox Authentication Manager offers multi-user facial biometrics to speed-up shared device sign-ins, eliminates authentication friction by saving and automatically filling user credentials for any productivity app that requires manual sign-in, and securely syncs users’ profiles across shared devices.&lt;/p&gt;

&lt;div class=&quot;video-container&quot;&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/zcw76H7qBl4?si=XY2zPJHX4SuL1b46&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;To create your KAM config, login to your Workspace ONE UEM console, go to &lt;strong&gt;Resources &amp;gt; Native Apps &amp;gt; Public&lt;/strong&gt;. Locate the KAM app (or import it via Google Managed Play if needed), &lt;strong&gt;Select&lt;/strong&gt; it and click &lt;strong&gt;Assign&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Assignment: &lt;em&gt;select-your-smart-group&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Delivery: &lt;strong&gt;Auto&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Restrictions - Managed Access: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Create an AppConfig
    &lt;ul&gt;
      &lt;li&gt;Knox license: &lt;em&gt;add-your-knox-license&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Customize KAM home screen
        &lt;ul&gt;
          &lt;li&gt;Title: &lt;em&gt;add-your-company-name&lt;/em&gt;&lt;/li&gt;
          &lt;li&gt;Description: &lt;em&gt;add-a-description&lt;/em&gt;&lt;/li&gt;
          &lt;li&gt;Show device Serial: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Admin PIN: &lt;em&gt;create-an-admin-pin&lt;/em&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Manage sign in controls
        &lt;ul&gt;
          &lt;li&gt;UEM being used: &lt;strong&gt;Omnissa Workspace ONE with launcher sign in screen&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Main sign in method: &lt;strong&gt;PIN+Face&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Notice description: &lt;strong&gt;Yes&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;PIN Length: &lt;em&gt;select-your-pin-length&lt;/em&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Manage sync controls
        &lt;ul&gt;
          &lt;li&gt;Enable syncing: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Sync Org ID: &lt;em&gt;add-your-company-name&lt;/em&gt;&lt;/li&gt;
          &lt;li&gt;Sync devices by: &lt;strong&gt;Group ID&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Sync Group ID: &lt;em&gt;create-a-groupid&lt;/em&gt;&lt;/li&gt;
          &lt;li&gt;Sync Group Key: &lt;em&gt;create-an-encryption-key&lt;/em&gt;
            &lt;ul&gt;
              &lt;li&gt;To create the encryption key, run the following command on your computer: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl rand -base64 24&lt;/code&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Sync send UDP port: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;49158&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;Sync receive UDP port: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;49159&lt;/code&gt;&lt;/li&gt;
          &lt;li&gt;Sync TCP port: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;7788&lt;/code&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Manage KAM behavior
        &lt;ul&gt;
          &lt;li&gt;Leave un-configured&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;App Assign&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Distribution&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Restrictions&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-Assign.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-Assign.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-Distribution.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-Distribution.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-Restrictions.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-Restrictions.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;AppConfig&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Configure&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Sync controls&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-AppConfig.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-AppConfig.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-AppConfig-1.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-AppConfig-1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-AppConfig-2.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-KAM-AppConfig-2.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-the-microsoft-authentication-library-msal&quot;&gt;4. The Microsoft Authentication Library (MSAL)&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://learn.microsoft.com/en-us/entra/msal/android/&quot;&gt;Microsoft Authentication Library (MSAL)&lt;/a&gt; is a modern authentication framework developed by Microsoft that enables apps to securely sign in users. By enabling Microsoft SSO for shared Android devices, your shift workers can seamlessly sign into mobile applications when they check-out (sign-in) a shared device. This feature enables single sign-on into:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Many first-party Microsoft apps, such as Microsoft Teams.
    &lt;ul&gt;
      &lt;li&gt;A list of first-party Microsoft apps that support this mode of single sign-on can be found &lt;a href=&quot;https://learn.microsoft.com/en-us/entra/msal/android/shared-devices#microsoft-applications-that-support-shared-device-mode&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Any other application that supports Microsoft’s shared device mode using the Microsoft Authentication Library (MSAL).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;41-configure-microsoft-sso&quot;&gt;4.1 Configure Microsoft SSO&lt;/h3&gt;
&lt;p&gt;To configure Microsoft SSO, login to your Workspace ONE UEM console, go to &lt;strong&gt;Groups &amp;amp; Settings &amp;gt; All Settings &amp;gt; System &amp;gt; Enterprise Integration &amp;gt; Directory Services&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Azure AD Integration: &lt;strong&gt;Enabled&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;Directory ID: &lt;em&gt;add-your-entraid-tenantid&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Azure AD for Identity Services: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;ms-DS-ConsistencyGuid: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ms-DS-ConsistencyGuid&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;Mapping Attribute Data Type: &lt;strong&gt;Binary&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Automatically revoke user tokens when wiping devices: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Android Shared Device Checkout: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;You will be redirected to Microsoft Entra. Log in with an administrator account for your Microsoft Entra tenant and authorise Workspace ONE UEM to obtain information about your directory users.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Confirm that &lt;strong&gt;Workspace ONE UEM MSAL SSO&lt;/strong&gt; is listed in &lt;strong&gt;Entra ID Console &amp;gt; Enterprise Applications&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Azure Active Directory
    &lt;ul&gt;
      &lt;li&gt;Tenant Name: &lt;em&gt;add-your-entraid-tenantname&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Use compliance data in Azure conditional access policies: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Use compliance data in Azure conditional access policies for iOS, Android, and macOS: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Perform a &lt;strong&gt;Sync&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;EntraID integration&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Compliance integration&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Directory1.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Directory1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Directory2.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Directory2.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h4 id=&quot;411-additional-steps-for-hybrid-setup&quot;&gt;4.1.1 Additional steps for hybrid setup&lt;/h4&gt;
&lt;p&gt;The following steps are only required if your have synchronised your users from on-premises Active Directory to Workspace ONE UEM via AirWatch Cloud Connector (ie. Your are not using Omnissa Identiy Services).&lt;/p&gt;

&lt;p&gt;Login to your Workspace ONE UEM console, go to &lt;strong&gt;Groups &amp;amp; Settings &amp;gt; All Settings &amp;gt; System &amp;gt; Enterprise Integration &amp;gt; Directory Services &amp;gt; Users tab&lt;/strong&gt;. Under &lt;strong&gt;Advanced&lt;/strong&gt; select &lt;strong&gt;Sync Attributes&lt;/strong&gt;. This will pull the Immutable ID for users into Workspace ONE UEM.&lt;/p&gt;

&lt;p&gt;Then login to &lt;strong&gt;Microsoft Entra admin center&lt;/strong&gt;, go to &lt;strong&gt;Enterprise Applications&lt;/strong&gt; and select &lt;strong&gt;Workspace ONE UEM MSAL SSO&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Open the &lt;strong&gt;Single sign-on&lt;/strong&gt; menu&lt;/li&gt;
  &lt;li&gt;Select &lt;strong&gt;Edit&lt;/strong&gt; next to &lt;strong&gt;Attributes &amp;amp; Claims&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Select &lt;strong&gt;Add New Claim&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;Name: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;on-premises-immutable-id&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;Source: &lt;strong&gt;Attribute&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Source attribute: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;user.onpremisesimmutableid&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/Entra-MSAL-SSO-Claim.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Next, you’ll need to create a signing key to securely issue the custom claim (Immutable ID). This signing key is made up of three components, a public key file, a private key file, and the password used to decrypt that private key. To generate the certificate, download the PowerShell script provided by Omnissa called: &lt;a href=&quot;https://customerconnect.omnissa.com/downloads/details?downloadGroup=WS1-UEM-SS&amp;amp;productId=1589&amp;amp;rPId=118923&quot;&gt;Set Custom Signing Key - Microsoft SSO&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Run the below &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PowerShell&lt;/code&gt; script, and replace the placeholder attributes with your tenant details.&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;/setCustomSigningKey.ps1&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-CertFriendlyName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;create-cert-friendlyname&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;create-a-pwd&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-TenantId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;add-your-entraid-tenantid&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ApplicationObjectId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;msal-app-object-id&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-SelfSigned&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;“&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;”&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The script provided seem to only works on Windows, so if you are using macOS or Linux, make sure to run this script from a Windows VM.&lt;/p&gt;

&lt;p&gt;Once completed, the script will generate two certificate files (.cer and .pfx). Keep them in a safe place in case you need them in future. Note that the signing certifcate is only valid for 1 year, so you will need to renew it before its expiration
.&lt;/p&gt;

&lt;h3 id=&quot;42-microsoft-authenticator&quot;&gt;4.2 Microsoft Authenticator&lt;/h3&gt;
&lt;p&gt;When configured in shared device mode, Microsoft Authenticator enables a secure and streamlined sign-in experience on devices used by multiple frontline workers. Instead of treating the device as personally owned, shared mode binds the authentication flow to a single, shift-based user session.&lt;/p&gt;

&lt;p&gt;To create your MS Authenticator shared device mode config, login to your Workspace ONE UEM console, go to &lt;strong&gt;Resources &amp;gt; Native Apps &amp;gt; Public&lt;/strong&gt;. Locate the MS Authenticator app (or import it via Google Managed Play if needed), &lt;strong&gt;Select&lt;/strong&gt; it and click &lt;strong&gt;Assign&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Assignment: &lt;em&gt;select-your-smart-group&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Delivery: &lt;strong&gt;Auto&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Restrictions - Managed Access: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Create an AppConfig
    &lt;ul&gt;
      &lt;li&gt;Shared Device Mode: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Prefill UPN in Shared Device Mode: &lt;em&gt;Leave this field blank&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Shared Device Mode Tenant Identifier: &lt;em&gt;add-your-entraid-tenantid&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Shared Device Mode Registration token: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{SharedDeviceRegistrationToken}&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;Suppress camera consent for QR code: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-App-MSA-AppConfig.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If you are using an Android Restrictions profile, ensure the setting &lt;strong&gt;Allow adding/deleting accounts&lt;/strong&gt; is set to &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;43-intelligent-hub-settings&quot;&gt;4.3 Intelligent Hub settings&lt;/h3&gt;
&lt;p&gt;The last configuration item for the MSAL integration is to configure Intelligent Hub to support it.&lt;/p&gt;

&lt;p&gt;Login to your Workspace ONE UEM console, go to &lt;strong&gt;Groups &amp;amp; Settings &amp;gt; All Settings &amp;gt; Devices &amp;amp; Users &amp;gt; Android &amp;gt; Intelligent Hub Settings&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Register as Shared Device with Azure for Conditional Access: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Global sign-in/sign-out using MSAL: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Hub-MSAL.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-workspace-one-uem&quot;&gt;5. Workspace ONE UEM&lt;/h2&gt;
&lt;h3 id=&quot;51-authentication-settings&quot;&gt;5.1 Authentication settings&lt;/h3&gt;
&lt;p&gt;Workspace ONE UEM supports several authentication workflows. In this setup, I’ve configured Workspace ONE UEM to use Omnissa Access as the authentication source. This in turn allows for Workspace ONE Launcher to use SAML for authentication instead of Active Directory. Omnissa Access is then federated with EntraID, so any authentication for device enrolment or Intelligent Hub will leverage EntraID conditional access policies.&lt;/p&gt;

&lt;p&gt;Also you need to make sure that your Google integration is set to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Management Mode: &lt;strong&gt;Work Managed&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Account Generation: &lt;strong&gt;Device-Based&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Management Source: &lt;strong&gt;Custom DPC&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;EMM Registration&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Enrollment&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-EMMRegistration.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-EMMRegistration.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Enrollment.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Enrollment.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;52-multi-user-staging-account&quot;&gt;5.2 Multi-user staging account&lt;/h3&gt;
&lt;p&gt;Workspace ONE UEM supports several staging workflows. In this setup, I’ve configured a multi-user staging account so that each device only needs to be staged once. Thereafter, frontline workers simply sign in at the start of their shift and sign out when they finish. At logoff, user specific data is cleared and the device returns to its clean, staged state, ready for the next worker.&lt;/p&gt;

&lt;p&gt;To configure a mutli-user staging account, login to your Workspace ONE UEM console, go to &lt;strong&gt;Accounts &amp;gt; Users&lt;/strong&gt; and click &lt;strong&gt;Add User&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Complete the necessary fields
    &lt;ul&gt;
      &lt;li&gt;This staging account could either be a Directory or Basic account&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;In the &lt;strong&gt;Advanced&lt;/strong&gt; tab, expand the &lt;strong&gt;Staging&lt;/strong&gt; section
    &lt;ul&gt;
      &lt;li&gt;Enable Device Staging: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Single User Devices: &lt;strong&gt;Disabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Multi User Devices: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Android Shared Device Mode: &lt;strong&gt;Launcher&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Accounts-Staging.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;53-shared-device-settings&quot;&gt;5.3 Shared device settings&lt;/h3&gt;
&lt;p&gt;Next you need to ensure that the shared device settings in Workspace ONE UEM are configured to align with your use case. In this setup I’ve configured the shared device settings as per below.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Grouping&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Logout&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Shared1.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Shared1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Shared2.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-Shared2.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;54-intelligent-hub-sdk&quot;&gt;5.4 Intelligent Hub SDK&lt;/h3&gt;
&lt;p&gt;If you want to enhance the user experience and remove the welcome and privacy sreens when signing into Hub or any Workspace ONE SDK enabled apps, I recommend using the below custom SDK settings.&lt;/p&gt;

&lt;p&gt;Login to your Workspace ONE UEM console, go to &lt;strong&gt;Groups &amp;amp; Settings &amp;gt; All Settings &amp;gt; Apps &amp;gt; Settings and Policies &amp;gt; Settings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Custom Settings: &lt;strong&gt;Enabled&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Paste the below json code&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;PolicyAllowFeatureAnalytics&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;DisplayPrivacyDialog&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;PrivacyPolicyLink&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://www.omnissa.com&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;mtdSettings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;isEntitled&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;CaptureDEXData&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Only use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mtdSettings&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CaptureDexData&lt;/code&gt; if you are licensed for those add-ons.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Settings-SDK.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;55-workspace-one-launcher&quot;&gt;5.5 Workspace ONE Launcher&lt;/h3&gt;
&lt;p&gt;Now onto the last piece of the puzzle, configuring Workspace ONE Launcher to customise the device layout.&lt;/p&gt;

&lt;p&gt;Workspace ONE Launcher is a customisable Android home screen to give organisations tighter control over corporate and frontline devices. By replacing the standard Android launcher, it allows IT teams to present only approved apps, apply kiosk settings, and lock down system settings to ensure a secure, task-focused environment. This creates a simpler experience for workers, reduces distractions, strengthens security, and ensures devices stay consistent and compliant. With flexible branding options Launcher is an ideal solution for retail, logistics, field services, and any scenario where devices need to stay focused, secure, and easy to use.&lt;/p&gt;

&lt;p&gt;To create a Launcher profile, login to your Workspace ONE UEM console, go to &lt;strong&gt;Resources &amp;gt; Profiles &amp;amp; Baselines &amp;gt; Profiles&lt;/strong&gt;, click &lt;strong&gt;Add&lt;/strong&gt; and &lt;strong&gt;Add Profile&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Platform: &lt;strong&gt;Android&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Management Type: &lt;strong&gt;Custom DPC&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Profile Name: &lt;em&gt;create-profile-name&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Scroll down the list and &lt;strong&gt;ADD&lt;/strong&gt; the &lt;strong&gt;Launcher&lt;/strong&gt; payload&lt;/li&gt;
  &lt;li&gt;Configure the settings as per your use case requirements
    &lt;ul&gt;
      &lt;li&gt;KAM requirements:
        &lt;ul&gt;
          &lt;li&gt;Enable App Data/Cache Clearing: &lt;strong&gt;Enable&lt;/strong&gt;&lt;/li&gt;
          &lt;li&gt;Excluded Package Names
            &lt;ul&gt;
              &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.samsung.android.knox.kam&lt;/code&gt;&lt;/li&gt;
              &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.samsung.android.knox.kpu&lt;/code&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Allowlist Activities on Check-in Check-out Screen: &lt;strong&gt;Enable&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;Provide the KAM &lt;strong&gt;Package Names&lt;/strong&gt; and &lt;strong&gt;Class Name&lt;/strong&gt; as per KAM &lt;a href=&quot;https://docs.samsungknox.com/admin/knox-authentication-manager/get-started/get-started-as-an-it-admin/&quot;&gt;documentation&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Allowlist specific Android Activities: Enable
            &lt;ul&gt;
              &lt;li&gt;Provide the KAM &lt;strong&gt;Package Names&lt;/strong&gt; and &lt;strong&gt;Class Name&lt;/strong&gt; as per KAM &lt;a href=&quot;https://docs.samsungknox.com/admin/knox-authentication-manager/get-started/get-started-as-an-it-admin/&quot;&gt;documentation&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Click on &lt;strong&gt;Configure Layout&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;Customise the device layout as per your use case requirements&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 1&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 2&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 3&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 4&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher1.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher2.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher2.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher3.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher3.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher4.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher4.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 5&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 6&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 7&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher config 8&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher5.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher5.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher6.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher6.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher7.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher7.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher8.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher8.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher canvas&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher hidden apps&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher layout&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Launcher for you&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-Canvas.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-Canvas.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-CanvasHidden.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-CanvasHidden.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-Layout.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-Layout.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-Foryou.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2025-11-19-Launcher-CICO-MSAL-KAM/WS1-Profile-Launcher-Foryou.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;user-experience&quot;&gt;User experience&lt;/h2&gt;

&lt;div class=&quot;video-container&quot;&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/bEPC7nJ1x4A?si=XKjlyJql0ld0Uw8V&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
                <pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2025-11-19-Launcher-CICO-MSAL-KAM</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2025-11-19-Launcher-CICO-MSAL-KAM</guid>
                
                <category>Workspace ONE</category>
                
                <category>Android</category>
                
                <category>Launcher</category>
                
                <category>Shared Device</category>
                
                <category>SSO</category>
                
                <category>MSAL</category>
                
                <category>Knox</category>
                
                
            </item>
        
            <item>
                <title>Bulk create EntraID users via PowerShell</title>
                <description>&lt;p&gt;Creating users in Microsoft Entra ID (formerly Azure AD) is a common task for tenant onboarding, lab builds, trials, or Proof of Concept (POC) engagements. When dealing with multiple users, automating the process can save significant time and ensure consistency. This PowerShell approach gives you flexibility to automate the user creation, licenses assignment and setup the prefered MFA method directly via Microsoft Graph.&lt;/p&gt;

&lt;p&gt;This post walks through how to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Create Entra ID users in bulk from a CSV file&lt;/li&gt;
  &lt;li&gt;Assign Microsoft licenses automatically&lt;/li&gt;
  &lt;li&gt;Configure user’s MFA method using either &lt;strong&gt;Mobile Phone&lt;/strong&gt; or &lt;strong&gt;Temporary Access Pass (TAP)&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Reset user passwords in bulk if required&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;create-a-csv-file&quot;&gt;Create a CSV file&lt;/h2&gt;
&lt;p&gt;Start by creating a CSV file that contains the users you want to create. This file will act as the input source for the scripts below. Save the file locally on your machine.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;UserPrincipalName,FirstName,LastName,DisplayName,UsageLocation,Mail,MailNickname,Password,MobilePhone
Testuser1@beaugtech.com,Test,User 1,Test User 1,AU,Testuser1@beaugtech.com,Testuser1,Password123!,+61 123456789
Testuser2@beaugtech.com,Test,User 2,Test User 2,AU,Testuser2@beaugtech.com,Testuser2,Password123!,+61 123456789
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Ensure each column header exactly matches the script variable names. For production use, avoid storing plaintext passwords in CSV files. Consider using Temporary Access Pass (TAP) or prompting users to set their own password.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bulk-create-users-with-mobile-phone-mfa---option-1&quot;&gt;Bulk create users with mobile phone MFA - Option 1&lt;/h2&gt;
&lt;p&gt;The following script:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Connects to Microsoft Graph&lt;/li&gt;
  &lt;li&gt;Creates users from the CSV&lt;/li&gt;
  &lt;li&gt;Assigns a Dev E5 license&lt;/li&gt;
  &lt;li&gt;Adds the mobile phone number as an MFA method&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Connect-MgGraph&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Scopes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;User.ReadWrite.All&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;UserAuthenticationMethod.ReadWrite.All&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Import CSV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Import-Csv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;~/Downloads/EntraID-User-Create-Bulk.csv&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Get Microsoft License SKU&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$e5Sku&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-MgSubscribedSku&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-All&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SkuPartNumber&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;DEVELOPERPACK_E5&apos;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Password profile from CSV&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$passwordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ForceChangePasswordNextSignIn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Create user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$newUser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;New-MgUser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-GivenName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;FirstName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Surname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;LastName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UsageLocation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UsageLocation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Mail&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Mail&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-MailNickname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MailNickname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-MobilePhone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MobilePhone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-PasswordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$passwordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AccountEnabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;User created: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Green&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Assign license&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Set-MgUserLicense&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$newUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AddLicenses&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SkuId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$e5Sku&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SkuId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-RemoveLicenses&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Give Entra time to finalize user provisioning&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Start-Sleep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Add MFA mobile phone method&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MobilePhone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;New-MgUserAuthenticationPhoneMethod&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$newUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-PhoneNumber&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MobilePhone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-PhoneType&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Mobile&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MFA mobile phone added: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MobilePhone&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Yellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;No mobile phone provided - MFA skipped&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DarkYellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Failed for &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Red&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;bulk-create-users-with-temporary-access-pass-tap---option-2&quot;&gt;Bulk create users with Temporary Access Pass (TAP) - Option 2&lt;/h2&gt;
&lt;p&gt;If you prefer using Temporary Access Pass (TAP) instead of mobile phone MFA, the script below creates users and generates a TAP for each one. The TAP values are exported to a CSV file for secure distribution.&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Connect-MgGraph&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Scopes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;User.ReadWrite.All&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;UserAuthenticationMethod.ReadWrite.All&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Import users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Import-Csv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;~/Downloads/EntraID-User-Create-Bulk.csv&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Output file&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;~/Downloads/EntraID-User-TAP-Export.csv&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tapResults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Get Microsoft License SKU&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$e5Sku&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-MgSubscribedSku&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-All&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SkuPartNumber&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;DEVELOPERPACK_E5&apos;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$passwordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ForceChangePasswordNextSignIn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Create user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$newUser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;New-MgUser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-GivenName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;FirstName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Surname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;LastName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UsageLocation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UsageLocation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Mail&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Mail&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-MailNickname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MailNickname&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-MobilePhone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;MobilePhone&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-PasswordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$passwordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AccountEnabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Assign license&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Set-MgUserLicense&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$newUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AddLicenses&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SkuId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$e5Sku&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SkuId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-RemoveLicenses&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        
        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Give Entra time to finalize user provisioning&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Start-Sleep&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Seconds&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Create Temporary Access Pass (TAP) for MFA&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tap&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;New-MgUserAuthenticationTemporaryAccessPassMethod&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$newUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-TemporaryAccessPass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;IsUsableOnce&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Allow reuse&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;LifetimeInMinutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;480&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;           &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# 8 hours expiry&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Capture results&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tapResults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PSCustomObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;TemporaryAccessPass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tap&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;TemporaryAccessPass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ExpiresInMinutes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;480&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;User created + TAP issued: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Green&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Failed for &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Red&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Export TAPs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tapResults&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Export-Csv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-NoTypeInformation&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Force&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;TAP export completed:&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Cyan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Yellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bulk-password-reset&quot;&gt;Bulk password reset&lt;/h2&gt;
&lt;p&gt;Occasionally, you may need to reset user passwords, the following script updates user passwords in bulk using the same CSV file.&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Connect to Microsoft Graph with required permissions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Connect-MgGraph&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Scopes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Directory.AccessAsUser.All&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;User.ReadWrite.All&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Import the CSV file (ensure it has a column for UserPrincipalName or Id)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$users&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Import-Csv&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;~/Downloads/EntraID-User-Create-Bulk.csv&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Set new password profile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PasswordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ForceChangePasswordNextSignIn&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Update the user&apos;s password&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Update-MgUser&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-UserId&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-BodyParameter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;passwordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PasswordProfile&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Updated password for user:&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UserPrincipalName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
                <pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2025-11-05-EntraID-Create-User-Bulk</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2025-11-05-EntraID-Create-User-Bulk</guid>
                
                <category>EntraID</category>
                
                <category>Script</category>
                
                
            </item>
        
            <item>
                <title>Migrating Omnissa DEM from AD mode to No-AD mode</title>
                <description>&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;/h2&gt;

&lt;p&gt;Omnissa &lt;a href=&quot;https://techzone.omnissa.com/resource/what-dynamic-environment-manager&quot;&gt;Dynamic Environment Manager (DEM)&lt;/a&gt; is a robust solution for managing user profiles and personalization across Windows virtual desktops and applications. It enables IT teams to deliver a consistent, tailored experience to users while maintaining centralized configuration control.&lt;/p&gt;

&lt;p&gt;Traditionally, DEM has relied on &lt;strong&gt;Active Directory (AD)&lt;/strong&gt; and &lt;strong&gt;Group Policy Objects (GPOs)&lt;/strong&gt; for configuration delivery. With the rise of cloud-first and hybrid architectures, Omnissa introduced &lt;strong&gt;No-AD mode&lt;/strong&gt;, removing the dependency on AD and simplifying deployment.&lt;/p&gt;

&lt;p&gt;By following a staged migration plan, you can ensure minimal disruption and maintain full control over the user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key steps include:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Preparing a valid &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoAD.xml&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reinstalling FlexEngine with the correct MSI switches&lt;/li&gt;
  &lt;li&gt;Verifying policy application&lt;/li&gt;
  &lt;li&gt;Rolling out in batches/rings&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ad-vs-no-ad-mode&quot;&gt;AD vs. No-AD mode&lt;/h2&gt;

&lt;h3 id=&quot;ad-mode&quot;&gt;AD mode&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Uses Group Policy Objects (GPOs) for configuration&lt;/li&gt;
  &lt;li&gt;Requires Active Directory for targeting and policy delivery&lt;/li&gt;
  &lt;li&gt;Best suited for traditional on-premises environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;no-ad-mode&quot;&gt;No-AD mode&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Uses a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoAD.xml&lt;/code&gt; config file stored on the configuration share&lt;/li&gt;
  &lt;li&gt;No dependency on AD or GPOs&lt;/li&gt;
  &lt;li&gt;Ideal for cloud-based or hybrid deployments&lt;/li&gt;
  &lt;li&gt;Configuration is driven by FlexEngine using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NOADCONFIGFILEPATH&lt;/code&gt; MSI property&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why-migrate-to-no-ad-mode&quot;&gt;Why migrate to No-AD mode?&lt;/h2&gt;

&lt;p&gt;Migrating to No-AD mode offers several advantages:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Simplified management&lt;/strong&gt; – No more GPO administration or AD filtering&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cloud readiness&lt;/strong&gt; – Supports cloud-only and hybrid environments&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Faster deployment&lt;/strong&gt; – File-based configuration is easy to replicate, and logins are typically faster since GPO processing is reduced&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Improved flexibility&lt;/strong&gt; – Ideal for modern workspace use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;change-considerations&quot;&gt;Change considerations&lt;/h2&gt;

&lt;h3 id=&quot;what-changes&quot;&gt;What changes&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;FlexEngine configuration mechanism:&lt;/strong&gt;&lt;br /&gt;
In No-AD mode, FlexEngine reads settings from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoAD.xml&lt;/code&gt; file instead of GPOs.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Installation method:&lt;/strong&gt;&lt;br /&gt;
FlexEngine must be installed using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NOADCONFIGFILEPATH&lt;/code&gt; MSI property.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;what-doesnt-change&quot;&gt;What doesn’t change&lt;/h3&gt;
&lt;p&gt;Your existing configuration remains fully compatible:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Configuration share&lt;/li&gt;
  &lt;li&gt;Profile archive share&lt;/li&gt;
  &lt;li&gt;Personalization settings&lt;/li&gt;
  &lt;li&gt;User Environment settings&lt;/li&gt;
  &lt;li&gt;Predefined/Default settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;co-existence&quot;&gt;Co-existence&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;FlexEngine in No-AD mode &lt;em&gt;ignores DEM GPO settings&lt;/em&gt;, enabling staged rollout by pool or OU.&lt;/li&gt;
  &lt;li&gt;You do &lt;strong&gt;not&lt;/strong&gt; need to remove GPOs immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;migration-steps&quot;&gt;Migration steps&lt;/h2&gt;

&lt;h3 id=&quot;1-create-a-noadxml-configuration-file&quot;&gt;1. Create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoAD.xml&lt;/code&gt; configuration file&lt;/h3&gt;
&lt;p&gt;Use the &lt;a href=&quot;https://docs.omnissa.com/bundle/DEMInstallConfigGuideV2309/page/SampleNoAD.xmlFile.html&quot;&gt;sample&lt;/a&gt; provided by Omnissa to create your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoAD.xml&lt;/code&gt; file and place it on your DEM configuration share.&lt;/p&gt;

&lt;h3 id=&quot;2-enable-no-ad-mode-on-client-machines&quot;&gt;2. Enable No-AD mode on client machines&lt;/h3&gt;

&lt;p&gt;Reinstall the DEM agent in No-AD mode on your gold image or test ring devices:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msiexec /i &quot;Omnissa Dynamic Environment Manager x64.msi&quot; /qn /l*v %TEMP%\DEM-NoAD.log NOADCONFIGFILEPATH=\\FileSrv\DEMConfig$\General
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;This enables No-AD mode.&lt;/li&gt;
  &lt;li&gt;FlexEngine will now read &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NoAD.xml&lt;/code&gt; from the specified path.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-verify-policy-application&quot;&gt;3. Verify policy application&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Confirm Personalization and User Environment settings apply correctly&lt;/li&gt;
  &lt;li&gt;Validate behavior across different user scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;4-roll-out-in-batches-or-rings&quot;&gt;4. Roll out in batches or rings&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Reinstall FlexEngine with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NOADCONFIGFILEPATH&lt;/code&gt; property on all target devices&lt;/li&gt;
  &lt;li&gt;Since No-AD clients ignore DEM GPOs, GPOs may remain during migration&lt;/li&gt;
  &lt;li&gt;Once all clients are migrated, unlink or disable DEM GPOs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;5-rollback-if-needed&quot;&gt;5. Rollback (If needed)&lt;/h3&gt;

&lt;p&gt;If rollback is required:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Uninstall FlexEngine&lt;/li&gt;
  &lt;li&gt;Reinstall without the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NOADCONFIGFILEPATH&lt;/code&gt; property&lt;/li&gt;
  &lt;li&gt;Re-enable DEM GPOs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since configuration and profile archives are unchanged, rollback is quick and low-risk.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;Migrating DEM from AD to No-AD mode is a strategic step for organizations moving toward cloud-first or hybrid models. It simplifies configuration management, reduces dependency on legacy infrastructure, and aligns with modern IT operations.&lt;/p&gt;

&lt;p&gt;Before full deployment, ensure thorough testing in a staging environment and validate all Personalization and User Environment configurations.&lt;/p&gt;
</description>
                <pubDate>Wed, 24 Sep 2025 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2025-09-24-DEM-noadmode-migration</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2025-09-24-DEM-noadmode-migration</guid>
                
                <category>Horizon</category>
                
                <category>DEM</category>
                
                <category>Windows</category>
                
                
            </item>
        
            <item>
                <title>Uninstall Windows applications silently with PowerShell</title>
                <description>&lt;p&gt;When deploying Windows devices using &lt;strong&gt;Autopilot&lt;/strong&gt;, unwanted &lt;strong&gt;Win32&lt;/strong&gt; or &lt;strong&gt;AppX&lt;/strong&gt; apps can clutter user experience or cause security risk. Below is a PowerShell script you can run in SYSTEM context to silently uninstall these apps as part of the &lt;strong&gt;Out-of-Box Experience (OOBE)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This PowerShell script:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Runs silently in the background without user interaction&lt;/li&gt;
  &lt;li&gt;Handles &lt;strong&gt;Win32 (MSI / EXE)&lt;/strong&gt; and &lt;strong&gt;AppX&lt;/strong&gt; applications&lt;/li&gt;
  &lt;li&gt;Supports &lt;strong&gt;exact or partial&lt;/strong&gt; application name matching&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;gathering-the-application-list&quot;&gt;Gathering the application list&lt;/h2&gt;
&lt;p&gt;Before uninstalling anything, you need to know what’s installed. The following sections show how to list traditional desktop apps (Win32/MSI/EXE) from the registry and modern UWP/AppX packages using PowerShell.
If you already know which applications you want to remove, you can skip this section. Otherwise, use the scripts below to identify installed applications on a Windows device.&lt;/p&gt;

&lt;h3 id=&quot;list-installed-win32-applications&quot;&gt;List installed Win32 applications&lt;/h3&gt;
&lt;p&gt;Run the following script to list all &lt;strong&gt;Win32 (MSI / EXE)&lt;/strong&gt; applications installed on the device.&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$RegistryPaths&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$RegistryPaths&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-ItemProperty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ErrorAction&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SilentlyContinue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UninstallString&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Select-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DisplayVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UninstallString&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make a note of the applications you want to remove. These names (exact or partial) will be used in the uninstall script later.&lt;/p&gt;

&lt;h3 id=&quot;list-installed-appx-applications&quot;&gt;List installed AppX applications&lt;/h3&gt;
&lt;p&gt;To list all removable AppX applications installed for all users on a Windows device, run:&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Get-AppxPackage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AllUsers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;NonRemovable&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$false&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Select-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PackageFullName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make a note of the applications you want to remove. These names (exact or partial) will be used in the uninstall script later.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;uninstall-script&quot;&gt;Uninstall script&lt;/h2&gt;
&lt;p&gt;The script below takes an array of application display names (exact or wildcard) and:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Discovers matching Win32 apps from the registry&lt;/li&gt;
  &lt;li&gt;Discovers matching AppX packages for all users&lt;/li&gt;
  &lt;li&gt;Executes silent uninstall or removal actions accordingly&lt;/li&gt;
  &lt;li&gt;Safely exits if no matching applications are found&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;box-note&quot;&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The script must be run in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SYSTEM&lt;/code&gt; context&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Define an array of app names (exact or partial match). For partial match use &apos;*&apos; symbol.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DisplayNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;AppName1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;AppName2*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;*AppName3*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Registry paths for Win32 apps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$RegistryPaths&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Collections&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundApps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundAppx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$SeenMSIs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Discover Win32 apps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DisplayNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$RegistryPaths&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-ItemProperty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ErrorAction&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SilentlyContinue&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-like&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForEach-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UninstallString&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-match&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\{[A-F0-9\-]{36}\}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$ProductCode&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$matches&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$SeenMSIs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-notcontains&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$ProductCode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$SeenMSIs&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$ProductCode&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundApps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PSCustomObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MSI&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ProductCode&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$ProductCode&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                        &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Command&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$null&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;QuietUninstallString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundApps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PSCustomObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;EXE&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ProductCode&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$null&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Command&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;QuietUninstallString&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

            &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UninstallString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundApps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PSCustomObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;EXE&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ProductCode&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$null&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                    &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Command&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UninstallString&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; /S /norestart&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Discover AppX apps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DisplayNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-AppxPackage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AllUsers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-like&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-or&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PackageFullName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-like&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForEach-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundAppx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PSCustomObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]@{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PackageName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PackageFullName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Log missing apps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Select-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Unique&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MissingApps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DisplayNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-notin&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MatchedNames&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$MissingApps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Application not found: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Yellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Exit if nothing found&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundApps&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundAppx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;No applications to uninstall.&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;DarkYellow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Uninstall Win32 apps silently&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundApps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Uninstalling Win32 app: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;MSI&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Start-Process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-FilePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;msiexec.exe&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ArgumentList&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/x &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ProductCode&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; /qn /norestart&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Wait&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-WindowStyle&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Hidden&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Start-Process&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-FilePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cmd.exe&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ArgumentList&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/c &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$App&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Command&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;`
&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Wait&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-WindowStyle&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Hidden&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Uninstall AppX apps&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Appx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FoundAppx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Removing AppX package: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Appx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Remove-AppxPackage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Package&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Appx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PackageName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-AllUsers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ErrorAction&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Failed to remove AppX package: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Appx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DisplayName&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Red&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
                <pubDate>Tue, 24 Jun 2025 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2025-06-24-Windows-App-Uninstall-Script</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2025-06-24-Windows-App-Uninstall-Script</guid>
                
                <category>Windows</category>
                
                <category>App</category>
                
                <category>Script</category>
                
                
            </item>
        
            <item>
                <title>List biometric devices on Windows via PowerShell</title>
                <description>&lt;p&gt;Run: System context&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$biometricDevices&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-CimInstance&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ClassName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Win32_PnPEntity&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Where-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PNPClass&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;Biometric&apos;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Present&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$devicesArray&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;New-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;System.Collections.ArrayList&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$biometricDevices&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$device&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$biometricDevices&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$devicesArray&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$device&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$devicesArray&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-join&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;No biometric devices&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
                <pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2025-02-13-Windows_Biometric_Detection</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2025-02-13-Windows_Biometric_Detection</guid>
                
                <category>Windows</category>
                
                <category>Script</category>
                
                
            </item>
        
            <item>
                <title>Disable Microsoft Office macros</title>
                <description>&lt;p&gt;Have you been asked to disable Office macros for all or most users to reduce your threat attack surface?&lt;/p&gt;

&lt;p&gt;I have built Workspace ONE UEM scripts to achieve this and thought I would share the details here.&lt;/p&gt;

&lt;h2 id=&quot;windows-configuration&quot;&gt;Windows configuration&lt;/h2&gt;

&lt;h3 id=&quot;script&quot;&gt;Script&lt;/h3&gt;
&lt;p&gt;In Workspace ONE UEM console, create a &lt;strong&gt;script&lt;/strong&gt; and paste the below code into the code field.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Name: Disable VBA for Office&lt;/li&gt;
  &lt;li&gt;Run: System context&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Disabling VBA for all office apps
# Define VBA variables
$keyPath1 = &quot;HKLM\SOFTWARE\Policies\Microsoft\Office\16.0\Common&quot;
$valueName1 = &quot;vbaoff&quot;
$valueData1 = 1

# Check if the registry key exists
if (Test-Path &quot;Registry::$keyPath1&quot;) {
    Set-ItemProperty -Path &quot;Registry::$keyPath1&quot; -Name $valueName1 -Value $valueData1
    Write-Host &quot;Registry key &apos;$valueName1&apos; has been set to &apos;$valueData1&apos;.&quot;
} else {
# Create the registry key if it doesn&apos;t exist
    New-Item -Path &quot;Registry::$keyPath1&quot; -Force | Out-Null
    Set-ItemProperty -Path &quot;Registry::$keyPath1&quot; -Name $valueName1 -Value $valueData1
    Write-Host &quot;Registry key &apos;$valueName1&apos; has been created and set to &apos;$valueData1&apos;.&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To enhence user experience, you might also want to disable the notification that could appear in Office.&lt;/p&gt;

&lt;p&gt;In Workspace ONE UEM console, create a &lt;strong&gt;script&lt;/strong&gt; and paste the below code into the code field.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Name: Disable VBA notifications for Office&lt;/li&gt;
  &lt;li&gt;Run: User context with admin right&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Define the registry key path for each Office application
$officeApplications = @{
    &quot;Excel&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\Excel\Security&quot;
    &quot;Word&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\Word\Security&quot;
    &quot;PowerPoint&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\PowerPoint\Security&quot;
    &quot;Access&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\Access\Security&quot;
    &quot;Outlook&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\Outlook\Security&quot;
    &quot;Publisher&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\Publisher\Security&quot;
    &quot;Visio&quot; = &quot;HKCU\Software\Policies\Microsoft\Office\16.0\Visio\Security&quot;
}

# Define the registry value name and data
# 1=Enable VBA macros, 2=Disable VBA macros with notification, 3=Disable VBA macros except digitally signed, 4=Disable VBA macros without notification
$valueName = &quot;VBAWarnings&quot;
$valueData = 4

# Loop through each Office application and set the registry value
foreach ($app in $officeApplications.GetEnumerator()) {
    $keyPath = $app.Value
    $appName = $app.Key

# Check if the registry key exists
    if (Test-Path &quot;Registry::$keyPath&quot;) {
        Set-ItemProperty -Path &quot;Registry::$keyPath&quot; -Name $valueName -Value $valueData
    } else {
# Create the registry key if it doesn&apos;t exist
        New-Item -Path &quot;Registry::$keyPath&quot; -Force | Out-Null
        Set-ItemProperty -Path &quot;Registry::$keyPath&quot; -Name $valueName -Value $valueData
    }

    Write-Host &quot;Disabled macros notifications for $appName.&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;reporting&quot;&gt;Reporting&lt;/h3&gt;
&lt;p&gt;Report on Microsoft Office VBA macros status on Windows via a PowerShell script.&lt;/p&gt;

&lt;p&gt;In Workspace ONE UEM console, create a &lt;strong&gt;sensor&lt;/strong&gt; and paste the below code into the code field.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Name: win_office_vbamacros_status&lt;/li&gt;
  &lt;li&gt;Run: System context&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# This script checks the status of the vbaoff setting on Windows
# Define the registry key variables
$keyPath = &quot;HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common&quot;
$valueName = &quot;vbaoff&quot;

# Check if the registry key path exists
if (Test-Path $keyPath) {
# Get the value of the registry value
$value = Get-ItemProperty -Path $keyPath -Name $valueName -ErrorAction SilentlyContinue
# Check if the value is not null (i.e., the value exists)
if ($value -ne $null) {
# Check if the value is set to 1
    if ($value.$valueName -eq 1) { Write-Output &quot;Disabled&quot; }
    else { Write-Output &quot;Enabled&quot; }
}
else { Write-Output &quot;Not set&quot; }
}
else { Write-Output &quot;Not set&quot; }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;macos-configuration&quot;&gt;macOS configuration&lt;/h2&gt;

&lt;h3 id=&quot;profile&quot;&gt;Profile&lt;/h3&gt;
&lt;p&gt;In Workspace ONE UEM console, create a &lt;strong&gt;custom profile&lt;/strong&gt; and paste the below code into the custom settings field.&lt;/p&gt;

&lt;p&gt;Configuration reference: https://learn.microsoft.com/en-us/deployoffice/mac/set-preference-macro-security-office-for-mac&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;dict&amp;gt;
	&amp;lt;key&amp;gt;PayloadDisplayName&amp;lt;/key&amp;gt;
	&amp;lt;string&amp;gt;Microsoft Office settings&amp;lt;/string&amp;gt;
	&amp;lt;key&amp;gt;PayloadIdentifier&amp;lt;/key&amp;gt;
	&amp;lt;string&amp;gt;com.microsoft.office.4164F689-9190-4094-A869-CE04C288947B&amp;lt;/string&amp;gt;
	&amp;lt;key&amp;gt;PayloadType&amp;lt;/key&amp;gt;
	&amp;lt;string&amp;gt;com.microsoft.office&amp;lt;/string&amp;gt;
	&amp;lt;key&amp;gt;PayloadUUID&amp;lt;/key&amp;gt;
	&amp;lt;string&amp;gt;4164F689-9190-4094-A869-CE04C288947B&amp;lt;/string&amp;gt;
	&amp;lt;key&amp;gt;PayloadVersion&amp;lt;/key&amp;gt;
	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;
	&amp;lt;key&amp;gt;VisualBasicEntirelyDisabled&amp;lt;/key&amp;gt;
	&amp;lt;true/&amp;gt;
	&amp;lt;key&amp;gt;VisualBasicMacroExecutionState&amp;lt;/key&amp;gt;
	&amp;lt;string&amp;gt;DisabledWithoutWarnings&amp;lt;/string&amp;gt;
&amp;lt;/dict&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;reporting-1&quot;&gt;Reporting&lt;/h3&gt;
&lt;p&gt;Report on Microsoft Office VBA macros status on macOS via a Bash script.&lt;/p&gt;

&lt;p&gt;In Workspace ONE UEM console, create a &lt;strong&gt;sensor&lt;/strong&gt; and paste the below code into the code field.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Name: macos_office_vbamacros_status&lt;/li&gt;
  &lt;li&gt;Language: Bash&lt;/li&gt;
  &lt;li&gt;Response: String&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;current_user=$(ls -l /dev/console | awk &apos;{print $3}&apos;)
vba_disabled_value=$(sudo -u $current_user defaults read &quot;/Library/Managed Preferences/com.microsoft.office.plist&quot; | grep &quot;VisualBasicEntirelyDisabled&quot; | awk &apos;{sub(/;/, &quot;&quot;); print $3}&apos;)

if [ -z &quot;$vba_disabled_value&quot; ]; then
    echo &quot;Not set&quot;
elif [ &quot;$vba_disabled_value&quot; -eq 1 ]; then
    echo &quot;Disabled&quot;
else
    echo &quot;Enabled&quot;
fi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
                <pubDate>Sun, 24 Nov 2024 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2024-11-24-Disable-Office-Macros</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2024-11-24-Disable-Office-Macros</guid>
                
                <category>Workspace ONE</category>
                
                <category>Office</category>
                
                <category>Macros</category>
                
                <category>Windows</category>
                
                <category>macOS</category>
                
                <category>Script</category>
                
                <category>Essential 8</category>
                
                
            </item>
        
            <item>
                <title>Terraform scripts to build Azure prerequisites for HCoA</title>
                <description>&lt;p&gt;Scripts to build the required Azure infrastructure components to support a deployment of Horizon Cloud on Azure (HCoA) next-gen. It uses Terraform to create the Azure resources needed for the deployment of the Horizon Edge (AKS).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tested with azuread 3.0.2 and azurerm 4.0.1 providers on macOS 14.7.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Terraform workflow will do the following in Azure:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Create a single Resouce Group in your Azure subscription&lt;/li&gt;
  &lt;li&gt;Create a VNet in this Resource Group&lt;/li&gt;
  &lt;li&gt;Create three (3) Subnets in this VNet:
    &lt;ul&gt;
      &lt;li&gt;Management Subnet&lt;/li&gt;
      &lt;li&gt;DMZ Subnet&lt;/li&gt;
      &lt;li&gt;Desktop Subnet&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Create either a Route Table or NAT Gateway, based on the connectivity type selection in the variable file
    &lt;ul&gt;
      &lt;li&gt;Route Table
        &lt;ul&gt;
          &lt;li&gt;Create a default route in the Route Table&lt;/li&gt;
          &lt;li&gt;Assign the default route to the Management subnet&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;NAT Gateway
        &lt;ul&gt;
          &lt;li&gt;Create a Public IP for a NAT Gateway&lt;/li&gt;
          &lt;li&gt;Create a NAT Gateway&lt;/li&gt;
          &lt;li&gt;Assign the NAT Gateway to the Management Subnet&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Assign the DNS Server settings to the VNet&lt;/li&gt;
  &lt;li&gt;Create two (2) Custom Roles:
    &lt;ul&gt;
      &lt;li&gt;Service Principal Role with minimum capabilities needed for the Service Principal used by Horizon Cloud&lt;/li&gt;
      &lt;li&gt;Azure Compute Read-Only role with permissions on to Read on Azure Compute Resources&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Create a User Managed Identity&lt;/li&gt;
  &lt;li&gt;Assign to the Managed Identity the Network Contributor &amp;amp; Managed Identity Operator built-in roles.&lt;/li&gt;
  &lt;li&gt;Create an Enterprise Application.&lt;/li&gt;
  &lt;li&gt;Create a Service Principal, Client ID and Client Secret for the Enterprise Application.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;before-you-begin&quot;&gt;Before you begin&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;Ensure you have the following softwares installed on your computer:
    &lt;ul&gt;
      &lt;li&gt;PowerShell&lt;/li&gt;
      &lt;li&gt;AZ module (Install-Module -Name Az)&lt;/li&gt;
      &lt;li&gt;Azure Command Line Tools&lt;/li&gt;
      &lt;li&gt;Terraform&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Ensure your Entra ID account has the Azure &lt;strong&gt;Owner role&lt;/strong&gt; assigned on your Azure susbcription&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;download-the-terraform-template&quot;&gt;Download the Terraform template&lt;/h2&gt;
&lt;p&gt;Terraform scripts and templates are located &lt;a href=&quot;https://github.com/Matt95B/horizon/tree/main/hcoa/azure-prereq&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;instructions&quot;&gt;Instructions:&lt;/h2&gt;
&lt;p&gt;1. Register the required Azure Service Providers via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PowerShell&lt;/code&gt; for Horizon Cloud. List of providers are documented &lt;a href=&quot;https://docs.omnissa.com/bundle/HorizonCloudServicesUsingNextGenGuide/page/ConfirmRequiredResourceProvidersAreRegisteredinYourMicrosoftAzureSubscription.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Connect-AzAccount&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$resource_providers_list&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.Authorization&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.Compute&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.ContainerService&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.KeyVault&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.MarketplaceOrdering&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.ResourceGraph&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.Network&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.Resources&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.Security&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.Storage&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Microsoft.ManagedIdentity&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$resource_providers_list&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForEach-Object&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Write-Host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Registering Resource Provider: &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ForegroundColor&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Cyan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Register-AzResourceProvider&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ProviderNamespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-ErrorAction&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;2. Edit the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;terraform.tfvars&lt;/code&gt; file and adjust the variables to suit your environment.&lt;/p&gt;

&lt;p&gt;3. Open your preferred terminal and browse to your Terraform deployment
folder:&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;~/Downloads/Terraform_HCoAdeploy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;4. Log in to your Azure environment and select your Azure subscription where you want to deploy Horizon Cloud&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;az&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;az&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;account&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--subscription&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Your Azure Subscription Name&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;5. On the very first run, you need to get the Terraform Providers.&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;terraform&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;6. Test your config using&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;terraform&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;7. Now you will be able to deploy against your settings:&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;terraform&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;plan&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-out&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;HCoADeploy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;terraform&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;HCoADeploy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;8. Copy and save the output details once the script finishes, you will need those details when deploying the Horizon Edge. In addition, run the below commands to reveal the sensitive values.&lt;/p&gt;
&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;terraform&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;service_principal_pwd_id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;terraform&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;service_principal_pwd_key&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;9. Implement the reminder of the pre-requisites for Horizon Cloud as per the &lt;a href=&quot;https://docs.omnissa.com/bundle/HorizonCloudServicesUsingNextGenGuide/page/RequirementsChecklistforDeployingaMicrosoftAzureEdge.html&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;2024-12-06: Ability to add additonal application owners to the service principal.&lt;/li&gt;
  &lt;li&gt;2024-11-25: Removed Azure Resource Providers registration from Terraform workflow. Resource Providers registration is now done via PowerShell instead to avoid (1)registration errors if already resgisterred and (2)retain registration during Terraform destroy.&lt;/li&gt;
  &lt;li&gt;2024-11-19: Added the option to select connectivity type for the management subnet (NAT vs Route).&lt;/li&gt;
  &lt;li&gt;2024-11-06: Initial release.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2024-11-06-HCoA-prereq-terraform</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2024-11-06-HCoA-prereq-terraform</guid>
                
                <category>Horizon</category>
                
                <category>HCoA</category>
                
                <category>Terraform</category>
                
                <category>Azure</category>
                
                <category>Script</category>
                
                
            </item>
        
            <item>
                <title>Omnissa POC templates</title>
                <description>&lt;p&gt;Over the years, I’ve helped customers deploy a wide range of EUC solutions, whether as paid projects, trials, or full Proof of Concept (POC). One of the most common challenges I see is getting started with the prerequisites. Vendor documentation is often extensive, scattered, and sometimes confusing, which can make the initial setup harder than it needs to be.&lt;/p&gt;

&lt;p&gt;To streamline this process, I began developing my own templates and tools to help customers capture the required information, track their progress, and accelerate deployment. Over time these resources have proven valuable across many engagements, so I decided it was finally time to share them with the wider community.&lt;/p&gt;

&lt;h2 id=&quot;success-criteria&quot;&gt;Success criteria&lt;/h2&gt;
&lt;p&gt;Success criteria are often overlooked or left until later in a project, yet they are critical for defining what a successful trial or POC looks like. Many customers find it difficult to start from a blank page, so I created a template to make this easier and guide the discussion from day one.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Omnissa-success-criteria.xlsx&quot;&gt;Omnissa-success-criteria.xlsx&lt;/a&gt;
&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Omnissa-success-criteria.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;logical-diagrams&quot;&gt;Logical diagrams&lt;/h2&gt;
&lt;p&gt;To help clients better understand how the Omnissa platform components interact, I created a set of simple, easy-to-consume logical diagrams. These diagrams provide a clear overview of the architecture and help support planning and stakeholder discussions.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;UEM&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Horizon&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;UEM + Horizon 8&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/UEM.drawio.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/UEM.drawio.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/Horizon.drawio.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/Horizon.drawio.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/UEM+Horizon8.drawio.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/UEM+Horizon8.drawio.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/UEM.drawio&quot;&gt;UEM.drawio&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/Horizon.drawio&quot;&gt;Horizon.drawio&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Logical-Diagrams/UEM+Horizon8.drawio&quot;&gt;UEM+Horizon8.drawio&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;network-diagrams&quot;&gt;Network diagrams&lt;/h2&gt;
&lt;p&gt;During a Proof of Concept, network diagrams help bridge the gap between design assumptions and real-world implementation. The following diagrams illustrate the high-level architecture, key integration points, and data flows involved in the Omnissa platform. They are intended to validate design decisions, highlight dependencies, and serve as a reference during testing and issue resolution.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;UEM&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Horizon 8&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Network-Diagrams/UEM-ACC-Connector-UAG-PowerShell.drawio.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Network-Diagrams/UEM-ACC-Connector-UAG-PowerShell.drawio.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Network-Diagrams/Horizon8-CS-AppVol-UAG.drawio.png&quot;&gt;&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Network-Diagrams/Horizon8-CS-AppVol-UAG.drawio.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Network-Diagrams/UEM-ACC-Connector-UAG-PowerShell.drawio&quot;&gt;UEM-ACC-Connector-UAG-PowerShell.drawio&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Network-Diagrams/Horizon8-CS-AppVol-UAG.drawio&quot;&gt;Horizon8-CS-AppVol-UAG.drawio&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;prerequisites-workbook&quot;&gt;Prerequisites workbook&lt;/h2&gt;
&lt;p&gt;I’ve also created a comprehensive prerequisites spreadsheet that captures all technical requirements in one place. It allows customers to record key configuration details as they work through the checklist. Once complete, the same document can be used as an as-built record, reducing duplication and saving time.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Omnissa-prerequisites.xlsx&quot;&gt;Omnissa-prerequisites.xlsx&lt;/a&gt;
&lt;img src=&quot;https://blog.beaugtech.com/assets/img/2024-07-01-Omnissa-poc/Omnissa-prerequisites.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
                <pubDate>Mon, 01 Jul 2024 00:00:00 +0000</pubDate>
                <link>https://blog2.beaugtech.com/2024-07-01-Omnissa-poc</link>
                <guid isPermaLink="true">https://blog2.beaugtech.com/2024-07-01-Omnissa-poc</guid>
                
                <category>Workspace ONE</category>
                
                <category>Horizon</category>
                
                <category>POC</category>
                
                
            </item>
        
    </channel>
</rss>