Managing Dataverse Plugins using PowerShell

Loading

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.

Leave a Reply

Your email address will not be published. Required fields are marked *