Dataverse plugins allow developers to extend functionality by executing custom business logic during data operations. Managing these plugins using PowerShell ensures automation, efficiency, and version control.
In this guide, we will cover:
Retrieving existing plugins
Registering a new plugin
Updating an existing plugin
Enabling or disabling plugins
Deleting a plugin
Step 1: Prerequisites
1. Install Required PowerShell Modules
Ensure the Microsoft.PowerPlatform.Cds.Client module is installed.
# Install the required module
Install-Module -Name Microsoft.PowerPlatform.Cds.Client -Scope CurrentUser -Force
# Import the module
Import-Module Microsoft.PowerPlatform.Cds.Client
2. Permissions Required
- System Administrator or Power Platform Admin role is required.
- Ensure Plugin Registration Tool access is granted.
Step 2: Connecting to Dataverse
Option 1: Interactive Login
For manual execution, use:
# Connect to Dataverse interactively
$connection = Connect-CdsService -ConnectionString "AuthType=OAuth;Url=https://yourorg.crm.dynamics.com;Prompt=Login"
Option 2: Using Service Principal
For automation, use an Azure AD App Registration.
# Define credentials
$clientId = "your-app-client-id"
$clientSecret = "your-app-client-secret"
$tenantId = "your-tenant-id"
$orgUrl = "https://yourorg.crm.dynamics.com"
# Convert secret to secure string
$secureSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientId, $secureSecret)
# Connect to Dataverse
$connection = Connect-CdsService -Url $orgUrl -ClientId $clientId -ClientSecret $secureSecret -TenantId $tenantId
Step 3: Retrieving Existing Plugins
To list all registered plugins:
# Get all plugins
$plugins = Get-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Fields "name", "pluginassemblyid"
# Display plugin names and IDs
$plugins | ForEach-Object {
Write-Host "Plugin Name: " $_.name " | Plugin ID: " $_.pluginassemblyid
}
This lists all registered plugins and their IDs.
Step 4: Registering a New Plugin
Prepare the Plugin Assembly
- Ensure the plugin DLL file is compiled and ready.
- Replace
"C:\Path\To\YourPlugin.dll"
with the actual file path.
# Load DLL file
$pluginPath = "C:\Path\To\YourPlugin.dll"
$pluginBytes = [System.IO.File]::ReadAllBytes($pluginPath)
# Register the plugin in Dataverse
$plugin = New-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Fields @{
"name" = "My New Plugin"
"content" = [Convert]::ToBase64String($pluginBytes)
"isolationmode" = 2 # 1 = None, 2 = Sandbox
}
Write-Host "Plugin Registered Successfully! Plugin ID: " $plugin.pluginassemblyid
The new plugin is now registered in Dataverse.
Step 5: Updating an Existing Plugin
To update an existing plugin, first retrieve its ID (see Step 3), then use:
# Define the Plugin ID
$pluginId = "your-plugin-id"
# Load new DLL file
$pluginPath = "C:\Path\To\UpdatedPlugin.dll"
$pluginBytes = [System.IO.File]::ReadAllBytes($pluginPath)
# Update the plugin
Set-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Id $pluginId -Fields @{
"content" = [Convert]::ToBase64String($pluginBytes)
}
Write-Host "Plugin Updated Successfully!"
This updates the plugin with the new DLL file.
Step 6: Enabling or Disabling a Plugin
Disable a Plugin
# Define the Plugin ID
$pluginId = "your-plugin-id"
# Disable the plugin
Set-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Id $pluginId -Fields @{
"ismanaged" = $false
}
Write-Host "Plugin Disabled Successfully!"
Enable a Plugin
# Enable the plugin
Set-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Id $pluginId -Fields @{
"ismanaged" = $true
}
Write-Host "Plugin Enabled Successfully!"
This toggles the plugin’s active status.
Step 7: Deleting a Plugin
To remove an existing plugin:
# Define the Plugin ID
$pluginId = "your-plugin-id"
# Delete the plugin
Remove-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Id $pluginId
Write-Host "Plugin Deleted Successfully!"
This permanently removes the plugin from Dataverse.
Step 8: Exporting Plugin Details to CSV
To analyze plugin usage, export details to a CSV file:
# Retrieve all plugins
$plugins = Get-CdsRecord -Connection $connection -EntityLogicalName "pluginassembly" -Fields "name", "pluginassemblyid"
# Export to CSV
$plugins | Select-Object name, pluginassemblyid | Export-Csv -Path "C:\DataversePlugins.csv" -NoTypeInformation
Write-Host "Plugin details exported to C:\DataversePlugins.csv"
This generates a report for all registered plugins.