In Power Platform, solutions help package and distribute customizations across environments. Using PowerShell, you can automate the deployment of managed and unmanaged solutions efficiently.
Key Differences Between Managed and Unmanaged Solutions
Feature | Managed Solution | Unmanaged Solution |
---|---|---|
Editability | Read-only (cannot be modified) | Fully editable |
Use Case | Used for deployment in production | Used for development |
Customization | Cannot be customized directly | Can be customized |
Rollback | Deletes all components upon removal | Components remain after deletion |
Step 1: Prerequisites
1.1 Install Required PowerShell Modules
Ensure the Power Platform PowerShell modules are installed:
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell -Force
Install-Module -Name Microsoft.PowerApps.PowerShell -Force
1.2 Authenticate to Power Platform
Sign in to Power Platform using:
Add-PowerAppsAccount
1.3 Identify Environment Name
Retrieve the Environment Name where the solution will be deployed:
Get-AdminPowerAppEnvironment | Select-Object DisplayName, EnvironmentName
Example Output:
DisplayName EnvironmentName
------------ -----------------------------
DevelopmentEnv abcdef12-3456-7890-abcd-ef1234567890
ProductionEnv fedcba98-7654-3210-fedc-ba9876543210
Step 2: Exporting a Solution
Before deploying a solution, it must be exported from the source environment.
$sourceEnv = "abcdef12-3456-7890-abcd-ef1234567890"
$solutionName = "MySolution"
$exportPath = "C:\Solutions\$solutionName.zip"
# Export Managed Solution
Export-CrmSolution -SolutionName $solutionName -Managed -OutFile $exportPath -EnvironmentName $sourceEnv
# Export Unmanaged Solution
Export-CrmSolution -SolutionName $solutionName -OutFile $exportPath -EnvironmentName $sourceEnv
This exports the solution as either Managed or Unmanaged.
Step 3: Importing a Solution
Once exported, the solution must be imported into the target environment.
$targetEnv = "fedcba98-7654-3210-fedc-ba9876543210"
$solutionFile = "C:\Solutions\MySolution.zip"
Import-CrmSolution -ImportMode "Upgrade" -SolutionFilePath $solutionFile -EnvironmentName $targetEnv
The Upgrade mode ensures a seamless transition for the new version.
Step 4: Automating Solution Deployment
To deploy a solution across multiple environments, use the following PowerShell script.
Automated Solution Deployment Script
param (
[string]$sourceEnv = "abcdef12-3456-7890-abcd-ef1234567890",
[string]$targetEnv = "fedcba98-7654-3210-fedc-ba9876543210",
[string]$solutionName = "MySolution",
[string]$solutionPath = "C:\Solutions\$solutionName.zip"
)
# Authenticate
Add-PowerAppsAccount
# Export Solution
Export-CrmSolution -SolutionName $solutionName -Managed -OutFile $solutionPath -EnvironmentName $sourceEnv
Write-Host "Solution '$solutionName' exported successfully."
# Import Solution
Import-CrmSolution -ImportMode "Upgrade" -SolutionFilePath $solutionPath -EnvironmentName $targetEnv
Write-Host "Solution '$solutionName' imported successfully into environment '$targetEnv'."
Save this script as Deploy-Solution.ps1
and run:
powershell.exe -File "C:\Scripts\Deploy-Solution.ps1"
Step 5: Scheduling Automatic Solution Deployment
To automate solution deployment, use Windows Task Scheduler.
- Open Task Scheduler (
taskschd.msc
). - Click Create Basic Task → Name it Deploy Power Platform Solution.
- Set Trigger (e.g., weekly or daily).
- Choose Start a Program, and enter:
powershell.exe -File "C:\Scripts\Deploy-Solution.ps1"
- Click Finish.
Now, solutions will be automatically deployed on schedule.
Step 6: Verifying Deployment
Confirm that the solution was deployed successfully:
Get-CrmSolutions -EnvironmentName $targetEnv | Where-Object {$_.UniqueName -eq "MySolution"}
Expected Output:
FriendlyName UniqueName Version
------------- ------------ ---------
MySolution MySolution 1.0.0.2