• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer
ControlUp Community

ControlUp Community

Connect, Learn, and Grow

  • Blog
  • Archives
  • Findings
  • Meetups
  • Videos
  • Events
  • Categories
    • ControlUp One Platform
    • ControlUp for Apps
    • ControlUp for Compliance
    • ControlUp Dashboards
    • ControlUp for Desktops
    • ControlUp for VDI
    • ControlUp Scripts & Triggers
    • ControlUp Synthetic Monitoring
    • ControlUp Workflows
  • Topics
    • Logos & Wallpaper
    • ControlUp.com
  • Join

How to View Installed Store Apps in ControlUp

Posted on May 20, 2026

A user asked about viewing installed store apps in ControlUp. Eugene mentioned that this is currently being worked on and may be included in the upcoming "Agent ONE" release. In the meantime, he suggested using a custom script to create and implement a custom index for reporting on store apps. The script was also shared for convenience.


Read the entire ‘How to View Installed Store Apps in ControlUp’ thread below:

Can CU see store apps that are installed

Even asked AI and this is what returns

New Outlook isn’t registered as a traditional installed app — this is expected, as it deploys as a Store/MSIX package

i want to see the outlook version thats install but if users are using the new version olk then we cant see it as an installed app ?


hey Eugene! not in the current SIP agent sadly. although, this is currently being worked on in our efforts to build "Agent ONE" – this was explicitly stated as an improvement. no solid release date on that one as of yet, but we should hopefully be expecting GA for this in the next couple months 🙂

if you need to get this working right now, you may be able to create and implement a custom script with detection logic surrounding this, then sending this into a new index to report/dashboard from.


@member this script you can use to make a custom index while waiting to be included

“`# ============================================================

Installed Applications Collector (Win32 + UWP)

– Console table

– JSON for SIP/Elastic

– CSV export

============================================================

Safe UTF8 handling

try {

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

} catch {

# Non-console host (service / scheduled task), ignore

}

Default/fallback install date

$global:default_date = [System.DateTime]::Parse("01/01/2000")

$global:dateFormats = @("yyyyMMdd", "dd/MM/yyyy")

————————————————————

Helpers

————————————————————

function Get-InstallDate {

param ($app)

$installDate = $default_date

$str_date = [string]$app.InstallDate

if ([string]::IsNullOrWhiteSpace($str_date)) {

$file = [string]$app.DisplayIcon

if ([System.IO.File]::Exists($file)) {

$installDate = [System.IO.File]::GetCreationTimeUtc($file)

} else {

$file = [string]$app.UninstallString

if ([System.IO.File]::Exists($file)) {

$installDate = [System.IO.File]::GetCreationTimeUtc($file)

}

}

} else {

$dt = $default_date

foreach ($format in $dateFormats) {

if ([System.DateTime]::TryParseExact($str_date, $format, $null, 0, [ref]$dt)) {

$installDate = $dt

break

}

}

}

return $installDate

}

function Get-InstalledAppInfo {

param ($app)

$AppInfo = [ordered]@{}

$AppInfo["name"] = [string]$app.DisplayName.Trim()

$AppInfo["version"] = [string]$app.DisplayVersion

$AppInfo["publisher"] = [string]$app.publisher

$installDate = Get-InstallDate -app $app

$AppInfo["installdate"] = $installDate.ToString("yyyyMMdd")

$AppInfo["iso_install_date"] = $installDate.ToString("O")

$AppInfo["source"] = [string]$app.InstallSource

$AppInfo["uninstall_string"] = [string]$app.UninstallString

$AppInfo["platform"] = 1 # Windows

$AppInfo["system_component"] = "false"

$AppInfo["user_profile"] = "false"

return $AppInfo

}

function Add-AppInfo {

param ($dictionary, $key, $value)

if (-not $dictionary.ContainsKey($key)) {

$dictionary.Add($key, $value)

}

}

————————————————————

Main dictionary

————————————————————

$InstalledApps = New-Object ‘System.Collections.Generic.Dictionary[string, psobject]’

———– Win32 apps (HKLM + HKU) ———–

$AppList = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* -ErrorAction SilentlyContinue

foreach ($app in $AppList) {

if ([string]::IsNullOrWhiteSpace($app.DisplayName)) { continue }

if ($app.PSObject.Properties.Name.Contains("ParentKeyName")) { continue }

$Key = [string]$app.PSChildName

$AppInfo = Get-InstalledAppInfo -app $app

$AppInfo["bits"] = "64"

$AppInfo["system_component"] = "true"

Add-AppInfo -dictionary $InstalledApps -key $Key -value $AppInfo

}

$AppList32 = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* -ErrorAction SilentlyContinue

foreach ($app in $AppList32) {

if ([string]::IsNullOrWhiteSpace($app.DisplayName)) { continue }

if ($app.PSObject.Properties.Name.Contains("ParentKeyName")) { continue }

$Key = [string]$app.PSChildName

$AppInfo = Get-InstalledAppInfo -app $app

$AppInfo["bits"] = "32"

$AppInfo["system_component"] = "true"

Add-AppInfo -dictionary $InstalledApps -key $Key -value $AppInfo

}

$hkUsers = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::Users, 0)

foreach ($userKey in $hkUsers.GetSubKeyNames()) {

if ($userKey.EndsWith("_Classes")) { continue }

if ($userKey.Equals(".DEFAULT")) { continue }

if ($userKey.StartsWith("S-1-5") -and (-not $userKey.StartsWith("S-1-5-21-"))) { continue }

$userAppPath = "Registry::HKEY_USERS\$userKey\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*"

$userAppList = Get-ItemProperty -Path $userAppPath -ErrorAction SilentlyContinue

foreach ($app in $userAppList) {

if ($app -eq $null) { continue }

if ([string]::IsNullOrWhiteSpace($app.DisplayName)) { continue }

$Key = "$userKey-$($app.PSChildName)"

$AppInfo = Get-InstalledAppInfo -app $app

$AppInfo["bits"] = "64"

$AppInfo["user_profile"] = "true"

Add-AppInfo -dictionary $InstalledApps -key $Key -value $AppInfo

}

$userAppPath32 = "Registry::HKEY_USERS\$userKey\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"

$userAppList32 = Get-ItemProperty -Path $userAppPath32 -ErrorAction SilentlyContinue

foreach ($app in $userAppList32) {

if ($app -eq $null) { continue }

if ([string]::IsNullOrWhiteSpace($app.DisplayName)) { continue }

$Key = "$userKey-$($app.PSChildName)"

$AppInfo = Get-InstalledAppInfo -app $app

$AppInfo["bits"] = "32"

$AppInfo["user_profile"] = "true"

Add-AppInfo -dictionary $InstalledApps -key $Key -value $AppInfo

}

}

———– UWP / AppX apps ———–

$AppxApps = Get-AppxPackage -AllUsers -ErrorAction SilentlyContinue | ForEach-Object {

$installDate = $default_date

if ($_.InstallDate) { $installDate = $_.InstallDate }

elseif (Test-Path $_.InstallLocation) { $installDate = (Get-Item $_.InstallLocation).CreationTimeUtc }

[ordered]@{

name = $_.Name

version = $_.Version.ToString()

publisher = $_.Publisher

installdate = $installDate.ToString("yyyyMMdd")

iso_install_date = $installDate.ToString("O")

source = $_.InstallLocation

uninstall_string = ""

platform = 1

bits = ""

system_component = "false"

user_profile = "true"

}

}

$i = 0

foreach ($app in $AppxApps) {

$Key = "UWP-$i"

Add-AppInfo -dictionary $InstalledApps -key $Key -value $app

$i++

}

————————————————————

Console output

————————————————————

Write-Host "`n=== Installed Applications (Readable View) ===" -ForegroundColor Cyan

Write-Host "Found $($InstalledApps.Count) applications (Win32 + UWP)." -ForegroundColor Yellow

if ($InstalledApps.Count -gt 0) {

$InstalledApps.Values |

ForEach-Object { [PSCustomObject]$_ } |

Sort-Object name |

Select-Object name, version, publisher, bits, installdate, user_profile, system_component, source |

Format-Table -AutoSize

} else {

Write-Host "⚠️ No installed applications detected." -ForegroundColor Red

}

————————————————————

JSON output for SIP / Elastic

————————————————————

Write-Output "`n### SIP DATA BEGINS ###"

$InstalledApps.Values | ConvertTo-Json -Compress -Depth 4

Write-Output "### SIP DATA ENDS ###"

————————————————————

Export to CSV

————————————————————

$csvPath = "C:\Temp\InstalledApps.csv"

try {

$folder = Split-Path $csvPath -Parent

if (-not (Test-Path $folder)) {

New-Item -ItemType Directory -Path $folder -Force | Out-Null

}

$InstalledApps.Values |

ForEach-Object { [PSCustomObject]$_ } | # flatten OrderedDictionary

Sort-Object name |

Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8

Write-Host "✅ Exported Installed Apps to $csvPath" -ForegroundColor Green

}

catch {

Write-Host "⚠️ Failed to export to CSV: $($_.Exception.Message)" -ForegroundColor Red

}“`

Continue reading and comment on the thread ‘How to View Installed Store Apps in ControlUp’.  Not a member? Join Here!


Categories: All Archives, ControlUp for Desktops

Ask Us Anything, Connect, Learn, and Grow with the ControlUp Community!

Login to the ControlUp Community to ask us anything, stay up-to-date on what’s new and coming soon and meet other like-minded techies like you.

Not already a member? Join Today!

Primary Sidebar

ControlUp Academy

Enroll in ControlUp Academy for expert-led technical training, equipping you with skills to effectively deploy, manage, and grow your ControlUp investment.

Learn here >

Rotating Images

Hidden Gem from our Community on Slack!

ControlUp Betas - What's Coming Next?
NEW ControlUp Features - Stay Up-to-Date!
ControlUp Scripts - Scripting, Zero to Hero
Latest KB Articles - Be the First to Learn

Video Tutorials Library

Visit our technical how-to videos, offering step-by-step tutorials on advanced features, troubleshooting, and best practices.

Watch here >

ControlUp Blog

Check out the ControlUp blog for expert advice and in-depth analysis.

Read here >

ControlUp Script Library

Visit the ControlUp technical script library, which offers a multitude of pre-built scripts and custom actions for your monitoring and troubleshooting requirements.

See here >

ControlUp Support

Visit the ControlUp support home and to delve deeper into ControlUp DEX solutions.

Browse here >

Footer

      

ControlUp Community
Of Techie, By Techie, For Techie!

Terms of Use | Privacy Policy | Security
Dive Deeper, Learn more at ControlUp.com

  • facebook
  • twitter
  • youtube
  • linkedin

© 2023–2026 ControlUp Technologies LTD, All Rights Reserved.

We use cookies to ensure that we give you the best experience on our website. by continuing to use this site you agree to our Cookie policy..