![]()
Integrating Power Platform PowerShell scripts into Azure DevOps allows for automated deployments, security management, and governance. This guide covers how to use Azure DevOps Pipelines with PowerShell to manage Power Platform.
Step 1: Install Required PowerShell Modules
Ensure the required Power Platform PowerShell modules are installed on the Azure DevOps Agent:
# Install Power Platform PowerShell Modules
Install-Module -Name Microsoft.PowerPlatform.DevOps.PowerShell -Scope CurrentUser -Force
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell -Scope CurrentUser -Force
Install-Module -Name Microsoft.PowerApps.PowerShell -Scope CurrentUser -Force
# Import the modules
Import-Module Microsoft.PowerPlatform.DevOps.PowerShell
Import-Module Microsoft.PowerApps.Administration.PowerShell
Import-Module Microsoft.PowerApps.PowerShell
If using a self-hosted agent, install these modules on the agent machine.
Step 2: Authenticate to Power Platform
Use a service principal or interactive login to authenticate.
Option 1: Login with Service Principal
Use a service principal for automated authentication:
$AppId = "YOUR_APP_ID"
$TenantId = "YOUR_TENANT_ID"
$ClientSecret = "YOUR_CLIENT_SECRET"
# Connect to Power Platform
Add-PowerAppsAccount -ApplicationId $AppId -TenantId $TenantId -ClientSecret $ClientSecret
Write-Host "Authenticated successfully!"
Option 2: Login with Managed Identity (for Azure-hosted agents)
Connect-AzAccount -Identity
Step 3: Create an Azure DevOps Pipeline for Power Platform
Create an Azure DevOps pipeline to automate Power Platform tasks.
Example Pipeline YAML (azure-pipelines.yml)
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: PowerShell@2
displayName: 'Authenticate to Power Platform'
inputs:
targetType: 'inline'
script: |
$AppId = "$(PowerPlatformAppId)"
$TenantId = "$(PowerPlatformTenantId)"
$ClientSecret = "$(PowerPlatformClientSecret)"
Add-PowerAppsAccount -ApplicationId $AppId -TenantId $TenantId -ClientSecret $ClientSecret
Write-Host "Authenticated successfully!"
- task: PowerShell@2
displayName: 'Export Power Platform Solution'
inputs:
targetType: 'inline'
script: |
$SolutionName = "MySolution"
$EnvironmentName = "DevEnvironment"
$OutputPath = "$(Build.ArtifactStagingDirectory)\MySolution.zip"
Export-CrmSolution -SolutionName $SolutionName -EnvironmentName $EnvironmentName -OutputFile $OutputPath -Managed
Write-Host "Solution exported to $OutputPath"
- task: PublishBuildArtifacts
displayName: 'Publish Solution Artifact'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'PowerPlatformSolution'
This pipeline:
✔ Authenticates to Power Platform
✔ Exports a Power Platform solution from Dev
✔ Publishes the solution as an artifact
Step 4: Deploy Solution to Target Environment
Create a separate pipeline stage for importing the solution to Test/Prod.
Import Solution Pipeline YAML
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download Solution Artifact'
inputs:
artifactName: 'PowerPlatformSolution'
downloadPath: '$(Build.ArtifactStagingDirectory)'
- task: PowerShell@2
displayName: 'Authenticate to Power Platform'
inputs:
targetType: 'inline'
script: |
$AppId = "$(PowerPlatformAppId)"
$TenantId = "$(PowerPlatformTenantId)"
$ClientSecret = "$(PowerPlatformClientSecret)"
Add-PowerAppsAccount -ApplicationId $AppId -TenantId $TenantId -ClientSecret $ClientSecret
Write-Host "Authenticated successfully!"
- task: PowerShell@2
displayName: 'Import Power Platform Solution'
inputs:
targetType: 'inline'
script: |
$SolutionFile = "$(Build.ArtifactStagingDirectory)\PowerPlatformSolution\MySolution.zip"
$TargetEnvironment = "TestEnvironment"
Import-CrmSolution -EnvironmentName $TargetEnvironment -FilePath $SolutionFile -OverwriteUnmanagedCustomizations
Write-Host "Solution imported successfully to $TargetEnvironment"
Step 5: Automate Security Role Assignments
Ensure users have the correct security roles post-deployment.
$UserId = "user@domain.com"
$SecurityRoleId = "SecurityRole_GUID"
$EnvironmentId = "Environment_GUID"
# Assign security role
New-AdminPowerAppEnvironmentRoleAssignment -UserId $UserId -SecurityRoleId $SecurityRoleId -EnvironmentName $EnvironmentId
Write-Host "Security role assigned successfully!"
Step 6: Automate API Monitoring in DevOps Pipelines
Monitor API usage in Dataverse within the pipeline.
$EnvironmentId = "YourEnvironmentId"
# Check API consumption
Get-AdminPowerAppEnvironment -EnvironmentName $EnvironmentId | Select-Object -ExpandProperty Capacity
Write-Host "API usage monitored for environment $EnvironmentId"
Step 7: Automate Rollback on Failure
If deployment fails, rollback to the previous version.
$PreviousSolutionFile = "C:\Deployments\PreviousSolution.zip"
$EnvironmentName = "TestEnvironment"
# Rollback to previous version
Import-CrmSolution -EnvironmentName $EnvironmentName -FilePath $PreviousSolutionFile -OverwriteUnmanagedCustomizations
Write-Host "Rollback completed successfully!"
Step 8: Integrate Power BI for Deployment Reports
To track deployments, export logs to Power BI.
$DeploymentLogs = "C:\Deployments\DeploymentLogs.csv"
# Get deployment logs
Get-AdminPowerPlatformPipelineDeploymentLog | Export-Csv -Path $DeploymentLogs -NoTypeInformation
Write-Host "Deployment logs exported for Power BI analysis"
Step 9: Automate Cleanup of Old Solutions
Remove unused solutions automatically.
$SolutionName = "OldSolution"
$EnvironmentName = "DevEnvironment"
# Remove old solution
Remove-CrmSolution -SolutionName $SolutionName -EnvironmentName $EnvironmentName
Write-Host "Old solution removed successfully!"
Step 10: Schedule Pipeline Runs in Azure DevOps
Use Azure DevOps schedules to automate deployments.
- Go to Azure DevOps Pipelines
- Click Triggers → Schedule
- Enable Scheduled Runs
- Set time (e.g., 3:00 AM Daily)
- Click Save
