Organizational messages and Onboarding with Get Started app

Organizational messages in Microsoft Intune (Public Preview)

In this post we will use the functionality of organizational messages to configure the “Get Stared” application that comes pre-installed on Windows 11.

This is a great functionality to configure and provide a good onboarding experience for the end-user.
Now I wish we could configure more than just two parts of the Get Started application, and allow more customization, one crucial part that is missing is the auto start of the application. For example, if a new user receives their device and turn it on, it would be great if the first thing that is displayed is the Get Started application.

Because I believe the auto start function is a crucial part of the onboarding, I have made a script that auto starts the Get Started application the first time the user starts their new device.

 Prerequisites to use Organization messages

  • Windows 11 22H2 or later

License requirements

Microsoft 365 E3
Microsoft 365 E5
Enterprise Mobility + Security E3 and Windows 10/11 Enterprise E3
Enterprise Mobility + Security E5 and Windows 10/11 Enterprise E5

Microsoft Documentation

Configure Windows Spotlight policy to support the Get Started application

Microsoft information

This only applies if you have configured a Security Baseline policy.

Security Baseline Policy, Spotlight settings

Now let’s create a Settings catalog profile, this is required to make Get Started application work when configured in Organizational messages.

  • In Intune portal, go to Devices – Windows – Configuration profiles.
  • Create a new configuration profile, Windows 10 and later, Settings catalog.
Settings catalog in Intune

Add the following settings and configuration, this is needed to support Organizational Messages

Organizational Messages Configuration

Configure the Get Started Application

Go to Tenant administration in the Intune portal and select Organizational messages.

Intune Menu for organizational messages

At the top next to Overview click on Message and Create.

Create Message

Select Message type: Get Started app.

Get Started App Config

Customize after the Get Started app.

Here you can add your company logo and select what language it should be in. Next, we will configure the messages, we can only configure two currently.

First messages allows you to select from the following options, you add a link where you want the user to be sent to when clicking it, in my case I want the user to see “Get started with device” I then have an internal link to a guide for the end-user that explains how their devices works and if there are something they need to do etc.

First Message Options

The second message allows you to select from the following options.

Second Message Options

You get the point 😊, how does it look like for the end-user?

End-User Experience

The user needs to start the application Get Started and is then greeted with a welcome message, and finally the message settings/links we created before are available to the end-user.

Further down this post I have added a PowerShell script that can be packages as a Win32 app and installed during Intune deployment, this will make sure the Get Started Application auto starts for the end -user one time.

Welcome experience for end-user
Welcome experience for end-user

Auto Start the Get Started App Script

<#
	.SYNOPSIS
		Auto starts the Get Started app
	
	.DESCRIPTION
		CleanUpAndExit: Used for Intune detection, if successfully installed or not
		RunOnce-GetStarted: Creates a Registry value in RunOnce for all users.

	.NOTES
		NAME: 		GetStarted-Install.ps1
		AUTHOR: 	Everything365.online
		LASTEDIT: 	2023-03-30
		
	.PARAMETER $StoreResults
		Set this parameter to fit your needs, location for Intune detection registry
		
	.PARAMETER $Key
		Set this parameter to fit your needs, location for Intune detection registry

#>

#-----------------------------------------------------------------------------------------------------------------------------------

If ($ENV:PROCESSOR_ARCHITEW6432 -eq "AMD64") {
    Try {
        &"$ENV:WINDIR\SysNative\WindowsPowershell\v1.0\PowerShell.exe" -File $PSCOMMANDPATH
    }
    Catch {
        Throw "Failed to start $PSCOMMANDPATH"
    }
    Exit
}

#-----------------------------------------------------------[Functions]-------------------------------------------------------------

Function CleanUpAndExit() {
    Param(
        [Parameter()][int]$ErrorLevel = 0
    )
	
    # Write results to registry for Intune Detection
	$StoreResults = "\Everything365\GetStarted"
    $Key = "HKEY_LOCAL_MACHINE\Software$StoreResults"
    $NOW = Get-Date -Format "yyyyMMdd-hhmmss"

    If ($ErrorLevel -eq 0) {
        [Microsoft.Win32.Registry]::SetValue($Key, "Success", $NOW)
    } else {
        [Microsoft.Win32.Registry]::SetValue($Key, "Failure", $NOW)
        [Microsoft.Win32.Registry]::SetValue($Key, "Error Code", $Errorlevel)
    }
    
    # Exit Script with the specified ErrorLevel
    EXIT $ErrorLevel
}

#-----------------------------------------------------------------------------------------------------------------------------------

function RunOnce-GetStarted {
    $Success = $false
    
    foreach ($userPath in (Get-ChildItem "Registry::HKEY_USERS\" | Where-Object { $_.Name -notmatch '_Classes|S-1-5-18|S-1-5-19|S-1-5-20' })) {
        $username = $userPath.PSChildName

        try {
            $RunOncePath = "HKEY_USERS\$username\Software\Microsoft\Windows\CurrentVersion\RunOnce"

            # Set the registry values for RunOnce
            [Microsoft.Win32.Registry]::SetValue($RunOncePath, "GetStarted", "explorer.exe shell:AppsFolder\MicrosoftWindows.Client.CBS_cw5n1h2txyewy!WebExperienceHost", [Microsoft.Win32.RegistryValueKind]::String)

        }
        catch {
            Write-Host "An error occurred: $($_.Exception.Message)" -ForegroundColor Red
            $Success = $false
            return $Success
        }
    }

    $Success = $true
    Write-Host "Registry values are set correctly for all users."
    return $Success
}

#--------------------------------------------------[Start setting registry values]-------------------------------------------------

$RunOnceGetStarted = RunOnce-GetStarted

if ($RunOnceGetStarted) {
    CleanUpAndExit -ErrorLevel 0
} else {
    CleanUpAndExit -ErrorLevel 101
}

Deploy the Script as a Win32 app during Intune deployment

Package the app with Intune Packager Tool

Make sure you modify the Intune detection part in the script before you package it.

Intune install command

This will depend on your settings in the script. Example below.

Intune Detection

Now add it as a required app during deployment.
It will add a RunOnce registry key that auto-starts the Get Started application for the end-user, one time.

The first time the user starts the device, the Get Started app auto starts, the registry value is then removed.

Hopefully Microsoft will add the auto start feature, but until then, this might be a good workaround.

5 1 vote
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments