Entra Provision On Demand PowerShell Module

It’s 2026 and somehow I keep finding myself back in 2016, integrating heritage applications into modern Identity & Access Management solutions. I’m still writing connectors that integrate the Microsoft Entra outbound provisioning service with SaaS and legacy on‑premises apps using ECMA connectors.

Once you’re in the develop → test → deploy loop, you’re constantly fixing mappings and expressions, replaying failures, and resyncing accounts. That’s where the Entra Provision On Demand PowerShell module comes in.

Instead of installing the Microsoft Graph PowerShell modules and wiring everything yourself, you get a slim, no‑dependency set of cmdlets to connect to Entra ID, enumerate provisioning‑enabled Enterprise Apps, inspect jobs and rules, and trigger on‑demand provisioning for individual objects or batches. Most of the time you’ll be querying the provisioning logs, finding accounts with sync errors, fixing a rule or expression, and then re‑submitting them via Provision on demand programmatically rather than click‑ops in the Entra portal.

Installation

Available on GitHub and the PowerShell Gallery.

Install from the PowerShell Gallery with:

Install-Module EntraProvisionOnDemand

Quick Start

The following example connects to Entra, discovers a provisioning app and job, gets the sync rule, and then provisions a single on‑prem user on demand. There are more examples in the GitHub Repo.

# Import the module
Import-Module EntraProvisionOnDemand

# Connect to Microsoft Graph (interactive)
Connect-EntraProvisioning -TenantId "contoso.onmicrosoft.com"

# Discover your provisioning app
$app = Get-EntraProvisioningApp -DisplayNameFilter "AD to Entra ID" | Select-Object -First 1

# Get the provisioning job
$job = Get-EntraProvisioningJob -ServicePrincipalId $app.Id | Select-Object -First 1

# Get the synchronization rule (required for ECMA/SCIM apps)
$rule = Get-EntraProvisioningRule -ServicePrincipalId $app.Id -JobId $job.JobId | Select-Object -First 1

# Provision a single user
Invoke-EntraProvisionOnDemand -ServicePrincipalId $app.Id -JobId $job.JobId `
    -ObjectId "CN=JohnDoe,OU=Users,DC=contoso,DC=com" -RuleId $rule.RuleId

# Disconnect when done
Disconnect-EntraProvisioning

Cmdlets Overview

Authentication cmdlets

Authentication cmdlets manage the Graph connection used by the module

CmdletDescription
Connect-EntraProvisioningAuthenticate to Microsoft Graph API
Disconnect-EntraProvisioningClear authentication context
Test-EntraProvisioningConnectionVerify connection status and permissions

Discovery cmdlets

Discovery cmdlets help you locate provisioning‑enabled apps, jobs, and rules

CmdletDescription
Get-EntraProvisioningAppList Enterprise Applications with provisioning enabled
Get-EntraProvisioningJobGet synchronization jobs for an application
Get-EntraProvisioningJobStatusGet detailed job status including quarantine info
Get-EntraProvisioningRuleGet synchronization rule IDs from job schema

Provisioning cmdlets

Provisioning cmdlets execute on‑demand provisioning for one or many objects

CmdletDescription
Invoke-EntraProvisionOnDemandTrigger on-demand provisioning for a single object
Invoke-EntraProvisionOnDemandBatchBatch provision from CSV or pipeline with throttling

Logging cmdlets

Logging cmdlets query provisioning audit logs so you can script your troubleshooting instead of living in the portal

CmdletDescription
Get-EntraProvisioningLogQuery provisioning audit logs with filtering

Summary

What started as a script, I turned into a module. A module that I’m using a lot. There are more examples in the GitHub Repo. Hopefully it is helpful to others too.