17 July 2026

Intune Enterprise App Catalog

What is "Intune Enterprise App Catalog" ?

Microsoft Intune Enterprise App Catalog apps are prepackaged Windows Win32 applications that can be discovered, added, deployed, and maintained directly from the Microsoft Intune admin center. The Enterprise App Catalog is part of Intune Enterprise App Management (EAM) and contains Microsoft and non-Microsoft applications that are prepared and hosted by Microsoft, including default installation commands, requirements, and detection rules to simplify app deployment.

Using Enterprise App Catalog apps helps reduce packaging effort, standardize application deployment, and keep applications current by making newer app versions available in the catalog. Once an app has been added to Intune, it can be assigned to users or devices like other Intune apps. Enterprise App Catalog apps are also supported with Windows Autopilot, where they can be selected as blocking apps in Enrollment Status Page and Device Preparation Page profiles.

Administrators should generally use the Microsoft-provided default settings for installation, uninstall, requirements, and detection. Changing these settings can cause installation failures or introduce unintended behavior. Organizations remain responsible for validating that catalog applications meet their internal security, compliance, and licensing requirements before deployment.

What do you need ?

EAM is not part of base Intune. It requires a subscription in addition to Intune Plan 1/Plan 2, and you get it one of three ways: 

·        As part of the Microsoft Intune Suite

·        As the standalone Enterprise App Management add-on SKU

·        Bundled into Microsoft 365 E5 – the change that makes this genuinely worth revisiting, because many already own E5

How to add an Enterprise App Catalog App

Open Intune portal and go to Apps > Windows













Click “+ Create”.
As App type, choose “Enterprise App Catalog app” and hit Select.

















Now, find your application by clicking “Search the Enterprise App Catalog”







Start typing the app name in the search box



















Select app

Select your app and hit Next











Configuration

Select your configuration and hit Next








Updates

You can choose between "Automatically update" or "Update with supersedence".





As you can read here, not much to change.




Here, you can do custom settings (but it is probably not needed).
You get more choices for assignments.

Automatically update

We will go with Automatically here.
We select "Automatically update" and then hit the "Select" button.


















This brings us to the "App information" blade.

App information
Fields are pre-filled for the chosen application.
Hit Next.


















Program

Fields are pre-filled, so Hit Next.







Requirements and Detection rules, nothing to do here.
This is because we have chosen “Automatically update”.

Supersedence

If you have no supersedence, hit Next.









Assignments

In this case, the app will be “Required”. This is again because of “Automatically update”.
Add your User- or device group and hit next.









Review + create

You get all the information about the app. If you are satisfied, hit the “Add app” button.



















Now you have created an app, that will update itself when updates are available.

In the Windows apps view, you will see these applications listed as "Windows Auto Update Catalog App".


Update with supersedence.

If you had chosen “Update with supersedence”






App information

Fields are pre-filled for the chosen application.
Hit Next.


















Program
Fields are pre-filled for the chosen application, but you can do changes.
Hit Next.














Requirements

Fields are pre-filled for the chosen application, but you can do changes.
Hit Next.














Detection rule

Fields are pre-filled, but you can do changes..









Supersedence

As this is an app where you will have to manage updates/new versions, you might have an old version that you can supersede.










Assignments

You will have more options as assignments:













Choose your preferred assignment type. Add user- or device group.

Review + create




























Hit “Add App”, and you now have a new app.







Intune will let you know, that this is the latest version of the app.
But, as the Update Method is Supersedence, you will have to monitor for app updates and create new packages.

In your Windows apps view, these kind of application/updates will be listed as Windows catalog app (Win32).










Read more about Microsoft Intune Enterprise Application Management here:

Microsoft Intune Enterprise Application Management - Microsoft Intune | Microsoft Learn

Here you will also find a list of all available applications.



16 July 2026

Intune - documentation and backup. Part 5

 Automation Account


Next step is to create an Automation Account.
I will use the following in the creation:

Configuration

Value

Resource group

RG-BBJ-IntuneMgmt

Automation account name

AA-BBJ-IntuneMgmt

Region

West Europe

System assigned

Selected

Connectivity configuration

Public access

Go to Process Automation, select Runbooks and click “Create a runbook”.





When created, we land in “Edit PowerShell Runbook”.

Now copy this script into Runbook:

# IntuneManagement 
# Intune Backup and Documentation
# Version 1.0
# Customer settings
$RGname = "RG-BBJ-IntuneMgmt"
$AutoAcc = "AA-BBJ-IntuneMgmt"
$StorAcc = "sabbjintunemgmt"

$TenantId = "94801ede-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$AppId = "61b18e96-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$TheSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$DocJson = "BulkDocumentation.json"
$BUJson = "BulkExport.json"

# Don't change below this point....
# Share names
$shareIntune    = "IntuneManagement"   # I:
$shareDocs      = "documentation"      # D:
$shareBackup    = "backup"             # B:

# Drive letters
$driveIntune = "I:"
$driveDocs   = "D:"
$driveBackup = "B:"

# Local paths (no date subfolders locally as requested)
$localRoot        = "C:\Intune\IntuneManagement"
$localToolDir     = Join-Path $localRoot "IntuneManagement"
$localDocFolder   = Join-Path $localRoot "Documentation"
$localBackupDir   = Join-Path $localRoot "Backup"

# ===== Helper functions =====
function Log([string]$msg) {
    $t = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    Write-Output "$t  $msg"
}

function MapDrive($drive$unc) {
    Log "Mapping $drive -> $unc"
    $cmd = "net use $drive `"$unc`" /user:Azure\$storAcc `"$SAKey`""
    cmd.exe /c $cmd > $null 2>&1
    Start-Sleep -Seconds 1
    if (-not (Test-Path "$drive\")) { throw "Failed to map $drive to $unc" }
    Log "Mapped $drive"
}

function UnmapDrive($drive) {
    Log "Unmapping $drive"
    cmd.exe /c "net use $drive /delete /y" > $null 2>&1
    Start-Sleep -Seconds 1
    Log "Unmapped $drive"
}

function EnsureDir($path) {
    if (-not (Test-Path $path)) {
        New-Item -Path $path -ItemType Directory -Force | Out-Null
        Log "Created folder: $path"
    }
}

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# access file share
$SAkey = (Get-AzStorageAccountKey -resourcegroupname $RGname -name $StorAcc)[0].value
$context = New-AzStorageContext -StorageAccountName $StorAcc -StorageAccountKey $SAkey

# ===== Start =====
Log "Run start - creating local structure and dummy files"

try {
    # Build UNC paths
    $uncIntune = "\\$StorAcc.file.core.windows.net\$shareIntune"
    $uncDocs   = "\\$StorAcc.file.core.windows.net\$shareDocs"
    $uncBackup = "\\$StorAcc.file.core.windows.net\$shareBackup"

    # Map drives
    MapDrive $driveIntune $uncIntune
    MapDrive $driveDocs $uncDocs
    MapDrive $driveBackup $uncBackup

    # Ensure local directories exist
    EnsureDir $localRoot
    EnsureDir $localToolDir
    EnsureDir $localDocFolder
    EnsureDir $localBackupDir

    # Copy IntuneManagement to local folder
    Log "Copying content from $driveIntune to $localToolDir"
    Copy-Item -Path "$driveIntune\*" -Destination $localToolDir -Recurse -Force -ErrorAction SilentlyContinue
    Log "Copy from I: completed"

    cd $localToolDir
    Log "Starting Documentation..." 
    Start-Process powershell -ArgumentList ".\Start-IntuneManagement.ps1 -silent -tenantId $TenantId -appid $AppId -secret $TheSecret -SilentBatchFile $DocJson" -wait    
    Log "End of Documentation..." 

    Log "Starting BackUp..." 
    Start-Process powershell -ArgumentList ".\Start-IntuneManagement.ps1 -silent -tenantId $TenantId -appid $AppId -secret $TheSecret -SilentBatchFile $BUJson" -wait
    Log "End of Backup..." 

    # Copy documentation file back to D:
    Log "Copying documentation file to $driveDocs"
    Copy-Item -Path (Join-Path $localDocFolder "*") -Destination $driveDocs -Force -ErrorAction Stop
    Log "Documentation file copied to share D:"

    # Copy entire local Backup folder to B:
    Log "Copying local backup folder to $driveBackup"
    Copy-Item -Path (Join-Path $localBackupDir "*") -Destination $driveBackup -Recurse -Force -ErrorAction Stop
    Log "Backup folder copied to share B:"

    # Local cleanup: remove local Tool, Documentation and Backup contents
    Log "Cleaning up local folders"
    try {
        Remove-Item -Path $localToolDir -Recurse -Force -ErrorAction SilentlyContinue
        Remove-Item -Path $localDocFolder -Recurse -Force -ErrorAction SilentlyContinue
        Remove-Item -Path $localBackupDir -Recurse -Force -ErrorAction SilentlyContinue
        Log "Local cleanup completed"
    } catch {
        Log "Local cleanup error: $($_.Exception.Message)"
    }

catch {
    Log ("ERROR: " + $_.Exception.Message)
finally {
    # Unmap drives
    try { UnmapDrive $driveDocs } catch { Log ("Unmap D: failed: " + $_.Exception.Message) }
    try { UnmapDrive $driveBackup } catch { Log ("Unmap B: failed: " + $_.Exception.Message) }
    try { UnmapDrive $driveIntune } catch { Log ("Unmap I: failed: " + $_.Exception.Message) }
    Log "Run completed"
}

In the script, there is a customer settings part (line 4 to 13). Settings here, should be changed according to you environment:

Variable

Description

My Values

$Rgname

Resource group

RG-BBJ-IntuneMgmt

$AutoAcc

Automation Account

AA-BBJ-IntuneMgmt

$StorAcc

Storage Accunt

sabbjintunemgmt

$TenantId

Tenant ID


$AppId    

Application (client) ID


$Secret

Client secret


$DocJson

File for running documentation (located on IntuneManagement share)

BulkDocumentation.json

$BUJson

Json file for running backup (located on IntuneManagement share)

BulkExport.json

You can do a test-run by choosing “Test pane”.

When the script runs without any errors, press “Publish”.

Now we will create a schedule to run this job automatically. Go to “Shared Resources”  > “Schedules” and hit “+ Add a schedule”.



Fill out with schedule name, time and recurrence, then hit create.


Now we have automized our backup and documentation of Intune.

As it is now, we will fill up space with backups and documentation files. We could do some clean-up....
In next part I will take the script and put in some house-cleaning.

14 July 2026

Intune - documentation and backup. Part 4

IntuneManagement

Now, download "Intune Management" from "https://github.com/Micke-K/IntuneManagement", and copy all files to the "intunemanagement" file share.

Because we want "IntuneManagement" to run unattended, we will have to create 2 json files:

  • BulkDocumentation.json
  • BulkExport.json
and put them in the intunemanagement share.


BulkDocumentation.json


{
    "BulkDocumentation":  [
                              {
                                  "Name":  "cbDocumentationType",
                                  "Value":  "html"
                              },
                              {
                                  "Name":  "cbDocumentationLanguage",
                                  "Value":  "en"
                              },
                              {
                                  "Name":  "cbDocumentationPropertySeparator",
                                  "Value":  ";"
                              },
                              {
                                  "Name":  "cbDocumentationObjectSeparator",
                                  "Value":  "\r\n"
                              },
                              {
                                  "Name":  "txtDocumentFilter",
                                  "Value":  ""
                              },
                              {
                                  "Name":  "txtDocumentFromFolder",
                                  "Value":  ""
                              },
                              {
                                  "Name":  "cbNotConifugredText",
                                  "Value":  null
                              },
                              {
                                  "Name":  "chkSkipNotConfigured",
                                  "Value":  false
                              },
                              {
                                  "Name":  "chkSkipDefaultValues",
                                  "Value":  false
                              },
                              {
                                  "Name":  "chkSkipDisabled",
                                  "Value":  true
                              },
                              {
                                  "Name":  "cbDocumentationValueOutputProperty",
                                  "Value":  "value"
                              },
                              {
                                  "Name":  "chkSetUnconfiguredValue",
                                  "Value":  true
                              },
                              {
                                  "Name":  "chkSetDefaultValue",
                                  "Value":  false
                              },
                              {
                                  "Name":  "chkIncludeScripts",
                                  "Value":  true
                              },
                              {
                                  "Name":  "chkExcludeScriptSignature",
                                  "Value":  false
                              },
                              {
                                  "Name":  "chkExcludeAssignments",
                                  "Value":  false
                              },
                              {
                                  "Name":  "txtHTMLDocumentName",
                                  "Value":  "C:\\Intune\\IntuneManagement\\Documentation\\%Date%-Doc.html"
                              },
                              {
                                  "Name":  "txtHTMLCSSFile",
                                  "Value":  ""
                              },
                              {
                                  "Name":  "chkHTMLOpenDocument",
                                  "Value":  false
                              },
                              {
                                  "Name":  "cbHTMLDocumentOutputFile",
                                  "Value":  "Full"
                              },
                              {
                                  "Name":  "txtDocumentationRawData",
                                  "Value":  ""
                              },
                              {
                                  "Name":  "ObjectTypes",
                                  "Type":  "Custom",
                                  "ObjectTypes":  [
                                                      "AppConfiguration",
                                                      "AppProtection",
                                                      "AppleEnrollment",
                                                      "Azure",
                                                      "Apps",
                                                      "ConditionalAccess",
                                                      "CustomAttributes",
                                                      "CompliancePolicies",
                                                      "DeviceConfiguration",
                                                      "WinDriverUpdatePolicies",
                                                      "EndpointAnalytics",
                                                      "EndpointSecurity",
                                                      "EnrollmentRestrictions",
                                                      "WinFeatureUpdates",
                                                      "PolicySets",
                                                      "WinQualityUpdates",
                                                      "Scripts",
                                                      "TenantAdmin",
                                                      "WinUpdatePolicies",
                                                      "WinEnrollment"
                                                  ]
                              }
                          ]
}

BulkExport.json

{

    "BulkExport":  [

                       {

                           "Name":  "txtExportPath",

                           "Value":  "C:\\Intune\\IntuneManagement\\Backup\\%Date%"

                       },

                       {

                           "Name":  "txtExportNameFilter",

                           "Value":  ""

                       },

                       {

                           "Name":  "chkAddObjectType",

                           "Value":  true

                       },

                       {

                           "Name":  "chkExportAssignments",

                           "Value":  true

                       },

                       {

                           "Name":  "chkAddCompanyName",

                           "Value":  true

                       },

                       {

                           "Name":  "chkExportScript",

                           "Value":  true

                       },

                       {

                           "Name":  "chkExportApplicationFile",

                           "Value":  true

                       },

                       {

                           "Name":  "chkExportPolicyFile",

                           "Value":  true

                       },

                       {

                           "Name":  "ObjectTypes",

                           "Type":  "Custom",

                           "ObjectTypes":  [

                                               "AdministrativeTemplates",

                                               "ADMXFiles",

                                               "AndroidOEMConfig",

                                               "AppConfigurationManagedApp",

                                               "AppConfigurationManagedDevice",

                                               "AppProtection",

                                               "AppleEnrollmentTypes",

                                               "Applications",

                                               "AuthenticationContext",

                                               "AuthenticationStrengths",

                                               "AutoPilot",

                                               "AzureBranding",

                                               "HardwareConfigurations",

                                               "CoManagementSettings",

                                               "CompliancePolicies",

                                               "CompliancePoliciesV2",

                                               "ComplianceScripts",

                                               "ConditionalAccess",

                                               "MacCustomAttributes",

                                               "DeviceCategories",

                                               "DeviceConfiguration",

                                               "DriverUpdateProfiles",

                                               "EndpointSecurity",

                                               "EnrollmentRestrictions",

                                               "EnrollmentStatusPage",

                                               "FeatureUpdates",

                                               "AssignmentFilters",

                                               "DeviceHealthScripts",

                                               "IntuneBranding",

                                               "InventoryPolicies",

                                               "NamedLocations",

                                               "Notifications",

                                               "PolicySets",

                                               "QualityUpdates",

                                               "ReusableSettings",

                                               "RoleDefinitions",

                                               "ScopeTags",

                                               "PowerShellScripts",

                                               "MacScripts",

                                               "SettingsCatalog",

                                               "TermsAndConditions",

                                               "TermsOfUse",

                                               "UpdatePolicies",

                                               "W365ProvisioningPolicies",

                                               "W365UserSettings"

                                           ]

                       }

                   ]

}


Create these two json files and put them in the intunemanagement share.

Then we are ready for the Automation Account.