Deploy a Sys Info Overlay via Microsoft Intune

Abhinay Pal Avatar

In enterprise environments, IT support teams often need quick access to device information when troubleshooting issues. Instead of asking users to run commands or navigate through system settings, what if device details were always visible on the desktop?

In this guide, I’ll walk you through deploying a custom Device Info Overlay that displays essential system information as a sleek, semi-transparent widget on the user’s desktop. We’ll package it as a Win32 app and deploy it through Microsoft Intune.

What We’re Building

The Device Info Overlay is a WPF-based PowerShell application that displays:

  • Hostname and Serial Number
  • Device Model and BIOS Version
  • Logged-in User and Domain
  • Azure AD Join and Intune Enrollment Status
  • IPv4 Address and OS Version
  • System Uptime and BitLocker Status
  • Local IT Contact Number

The overlay includes a Copy button that allows users to copy all device details to the clipboard with a single click, making it easy to share information with IT support.

Prerequisites

  • Microsoft Intune admin access
  • Microsoft Win32 Content Prep Tool (IntuneWinAppUtil.exe)
  • Windows 10/11 target devices
  • Basic PowerShell knowledge

Solution Architecture

The solution consists of two PowerShell scripts:

  • Display_SysInfo.ps1 – The main overlay script that creates the WPF window and displays device information
  • Deploy-DeviceOverlay-Hidden.ps1 – The deployment script that handles installation and persistence

The Challenge with Intune Deployment

Deploying GUI-based PowerShell scripts through Intune presents several challenges:

  • SYSTEM Context: Intune Win32 apps run as SYSTEM, which has no desktop access
  • Visible PowerShell Window: Standard execution shows a PowerShell console window in the taskbar
  • Persistence: The overlay needs to launch automatically at every user logon
  • Scheduled Task Limitations: Creating scheduled tasks for user groups from SYSTEM context often fails with ‘Access Denied’

Our Solution

We solve these challenges using a combination of techniques:

  • VBScript Wrapper: Launches PowerShell completely hidden (no taskbar icon)
  • Registry Run Key: Uses HKLM Run key instead of Scheduled Tasks (works from SYSTEM context)
  • Local File Copy: Copies scripts to C:\ProgramData\Scripts before execution

Step 1: The Display Script (Display_SysInfo.ps1)

This script creates a WPF-based overlay window. Let’s examine the key components:

Configuration Section

$LocalITNumber = "+91-XXXXXXXXXX"
$RefreshSeconds = 30
$marginRight = 18
$marginTop = 18

Update the LocalITNumber with your organization’s IT support contact. The overlay refreshes every 30 seconds by default.

Device Information Collection

The script uses multiple methods to gather device information:

  • dsregcmd /status: Retrieves Azure AD and domain join status
  • Win32_ComputerSystem: Gets manufacturer, model, and domain information
  • Win32_BIOS: Retrieves serial number and BIOS version
  • Registry Enrollments: Checks Intune enrollment status
  • Get-BitLockerVolume: Checks BitLocker protection status

Step 2: The Deployment Script (Deploy-DeviceOverlay-Hidden.ps1)

This script handles the Intune deployment complexities:

File Deployment

# Copy ALL files from Intune cache to local folder
$destFolder = "C:\ProgramData\Scripts" Get-ChildItem -Path $sourceDir -File | ForEach-Object { Copy-Item -Path $_.FullName -Destination $destFolder -Force }

VBScript Hidden Launcher

The key to hiding the PowerShell window is using a VBScript wrapper:

$vbsContent = @" Set objShell = CreateObject("WScript.Shell") objShell.Run "powershell.exe -NoProfile -ExecutionPolicy Bypass
-WindowStyle Hidden -File ""$destScript""", 0, False "@

The ‘0’ parameter in objShell.Run ensures the window is completely hidden, and ‘False’ means it won’t wait for the script to complete

Registry Run Key for Persistence

Instead of using Scheduled Tasks (which fail from SYSTEM context), we use the HKLM Run key:

$runKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$runKeyName = "DeviceInfoOverlay"
$runKeyValue = "wscript.exe `"$vbsLauncher`"" Set-ItemProperty -Path $runKeyPath -Name $runKeyName -Value $runKeyValue -Force

This ensures the overlay launches for ALL users at logon, and SYSTEM has permission to write to HKLM.

Step 3: Package for Intune

Create a folder with both scripts and package using IntuneWinAppUtil.

Step 4: Configure in Intune

Create a new Win32 app in Intune with these settings:

SettingValue
Install Commandpowershell.exe -ExecutionPolicy Bypass -File Deploy-DeviceOverlay-Hidden.ps1
Uninstall Commandpowershell.exe -Command "Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name 'DeviceInfoOverlay' -Force; Remove-Item 'C:\ProgramData\Scripts' -Recurse -Force"
Install BehaviorUser
Device RestartNo specific action

Detection Rule

SettingValue
Rule TypeFile
PathC:\ProgramData\Scripts
FileLaunch-Overlay.vbs
Detection MethodFile or folder exists

Step 5: Assign and Deploy

Conclusion

This solution provides a clean, professional way to display device information to users while maintaining a seamless experience. The combination of VBScript launchers and Registry Run keys overcomes the typical challenges of deploying GUI applications through Intune.

The overlay is particularly useful for:

  • IT support teams troubleshooting remote devices
  • Help desk scenarios where users need to provide device details
  • Shared device environments like labs or kiosks
  • Quick verification of Intune enrollment and Azure AD join status

Download

Download the complete solution from GitHub:

Enjoying this article?

Subscribe to get new posts delivered straight to your inbox. No spam, unsubscribe anytime.

No spam. Unsubscribe anytime.

You may also like

See All PowerShell →

Leave a Comment

Your email address will not be published. Required fields are marked *