Say Goodbye to Repetitive Admin Tasks: Dataverse Admin Skills Now in Public Preview

If you’ve ever spent an afternoon clicking through the Power Platform Admin Center to apply the same setting across a dozen Dataverse environments, you’ll understand the frustration. Microsoft has now addressed exactly that pain point with the public preview launch of Dataverse Admin Skills — a capability that brings natural language administration to your coding tool, whether that’s GitHub Copilot or Claude Code.

The Admin Bottleneck Problem

Picture this: your security team requests that auditing be enabled across all 20 of your Dataverse environments — today. Without automation, that means 20 separate logins, 20 sets of clicks, and 20 opportunities for human error. Alternatively, you put in a request to a developer to write a bulk script — and wait.

This is the exact gap Dataverse Admin Skills is designed to close. Instead of navigating admin consoles or waiting on scripts, you simply describe what you want in plain English, and the agent handles the rest.

How It Works

Dataverse Admin Skills operates through two complementary paths:

  • Natural Language (Agentic) Path: Using the Dataverse Skills Plugin inside GitHub Copilot or Claude Code, you describe your intent in plain English. The plugin translates your request into the appropriate PAC CLI commands, executes them against the Dataverse Web API, and gives you a clear summary of what changed. It supports multi-environment parallel execution and enforces built-in safety guardrails — including confirmation prompts before any destructive actions.
  • Direct Scripting Path: The same PAC CLI commands powering the agentic experience are available for use in Bash, PowerShell, or SDK scripts. This makes it ideal for CI/CD pipelines, runbooks, and repeatable automation workflows.

Both paths rely on PAC CLI (v2.6+, .NET Framework) and the Dataverse Web API, ensuring a consistent and trusted execution layer.

A Real Example

Say you type: “Enable AllowMCP setting on all environments starting with Preprod.”

Here’s what happens behind the scenes:

  1. The agent lists your Dataverse environments.
  2. It filters for environments matching your criteria.
  3. It asks you to confirm the target list before making any changes.
  4. It updates each environment in parallel.
  5. It presents a summary table of every change made.

One sentence. No browser tabs opened. No scripts written.

What’s Available Right Now

  • Settings Management: Read and update 37 allowlisted PPAC toggles across environments — covering MCP, audit, retention, recycle bin, search, Microsoft Fabric integration, security, and more. Works on a single environment or in bulk with parallel execution.
  • Bulk Delete: Schedule, monitor, pause, resume, and cancel bulk delete jobs. Safety is built in — confirmation prompts, FetchXML validation, and warnings for system tables help prevent accidental data loss.
  • Long-Term Retention: Enable retention on entities, set archival criteria using FetchXML, and track retention jobs. Particularly valuable for compliance scenarios where data needs to be retained but not kept in active storage.
  • Capacity Management (Coming Soon): Storage breakdowns, growth trends, capacity alerts, and archival recommendations — all accessible from your coding tool.

Getting Started in Three Steps

Step 1: Install the Plugin

  • In GitHub Copilot (VS Code): /plugin install dataverse@awesome-copilot
  • In Claude Code: /plugin install dataverse@claude-plugins-official

Step 2: Connect Your Environments

Open your coding tool and ask: “List all my Dataverse environments.” The agent will install PAC CLI if needed, authenticate you, and return your environment list. If anything is missing, it walks you through setup.

Step 3: Try It Out

Here are some prompts to get started:

  • “Enable the Microsoft Fabric integration on all production environments.”
  • “What is the recycle bin retention period for my sandbox environment?”
  • “Disable Dataverse search across all environments in the Europe region.”
  • “Cancel all system jobs that have been stuck in a waiting state since yesterday.”
  • “Set the long-term retention criteria for the custom log table to archive records older than 2 years.”

Why This Matters

Dataverse Admin Skills represents a meaningful shift in how platform administrators interact with their environments. Rather than being constrained by what a UI exposes or waiting for a developer to write automation scripts, admins can now express intent directly — and act on it at scale. The safety guardrails (allowlists, confirmation prompts, parallel execution controls) mean this power comes without sacrificing governance.

This is currently a public preview release, with Microsoft actively refining and expanding the skill set. Now is a great time to explore what it can do.

Original article: Agentic Administration: Dataverse Admin Skills now available in Public Preview by Anirudha Bakore, Microsoft.

Dataverse Long-Term Data Retention

Mastering Data verse Long-Term Data Retention: A Quick Guide

Managing database growth in Microsoft Dataverse just got easier with long-term data retention policies. Instead of permanently deleting your historical “cold” data or letting it bloat your active environment, you can securely archive it.

Here is everything you need to know to set up a data retention policy in Dataverse.

📋 Phase 1: The Prerequisites

Before you can schedule a retention policy, you need to prepare your tables and data criteria.

  • Enable the Parent Table: Go to the properties of your target table in Power Apps, expand Advanced options, and check Enable long term retention.
  • Note: Turning this on automatically enables all related child tables (like notes or tasks). It takes about 15–30 minutes to activate.
  • Create a Criteria View: Dataverse uses standard system views to determine which records get archived.
  • Best Practice: Build a dedicated view (e.g., “Cases Closed Before 2015”). Microsoft strongly recommends testing this view with a TOP N statement (like TOP 10) first to ensure your query pulls exactly what you expect before applying it to millions of rows.

⚙️ Phase 2: Setting Up the Policy

Once your tables are enabled and your view is ready, an administrator can deploy the policy:

  1. Sign into Power Apps and navigate to Retention policies on the left menu.
  2. Select New retention policy.
  3. Fill out the required details:
  • Table: Select your root parent table.
  • Name: Give your policy a clear name.
  • Criteria: Choose the Dataverse view you tested earlier.
  • Schedule & Frequency: Choose a start date and set how often it should run (Once, Daily, Weekly, Monthly, or Yearly).
  1. Hit Save.

⚠️ Critical Gotchas & Limitations

Before you hit go, keep these unique platform behaviors in mind:

  • It’s a One-Way Street: Once data is moved to long-term storage, it cannot be moved back to the active data store.
  • API Limits Apply: Running retention policies counts against your Microsoft Power Platform API request allocations.
  • Background Throttling: These policies are treated as low priority by the platform to avoid slowing down your active apps and flows. As a result, a single policy run can take 72 to 96 hours, regardless of the data volume.
  • Known Timeout Issue: If a parent table has a massive cascade chain (25+ child tables), the process might time out. The workaround is to manually enable a few child tables for retention first, then enable the parent table.

Connect to Dynamics 365 CRM Online using a client ID and secret in a C# console app


1. Prerequisites

  • Install the Dynamics 365 SDK assemblies. You can install the necessary NuGet packages, such as:
  • Microsoft.CrmSdk.CoreAssemblies
  • Microsoft.CrmSdk.XrmTooling.CoreAssembly
  • Register your app in Azure Active Directory (AAD) to retrieve the client ID, client secret, and tenant ID.

2. Code Implementation

The following code demonstrates how to authenticate and interact with Dynamics 365 CRM using the CRM SDK:

using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Tooling.Connector;

class Program
{
    static void Main(string[] args)
    {
        string clientId = "Your_Client_ID";
        string clientSecret = "Your_Client_Secret";
        string tenantId = "Your_Tenant_ID";
        string crmUrl = "https://Your_CRM_Organization.crm.dynamics.com/";

        // Create connection string
        string connectionString = $@"
            AuthType=ClientSecret;
            ClientId={clientId};
            ClientSecret={clientSecret};
            TenantId={tenantId};
            Url={crmUrl};";

        // Establish connection
        CrmServiceClient serviceClient = new CrmServiceClient(connectionString);

        if (serviceClient.IsReady)
        {
            Console.WriteLine("Connected to CRM successfully!");

            // Example: Retrieve accounts
            IOrganizationService service = serviceClient.OrganizationServiceProxy;
            QueryExpression query = new QueryExpression("account")
            {
                ColumnSet = new ColumnSet("name", "accountnumber")
            };

            EntityCollection results = service.RetrieveMultiple(query);

            foreach (var entity in results.Entities)
            {
                Console.WriteLine($"Account Name: {entity.GetAttributeValue<string>("name")}, Account Number: {entity.GetAttributeValue<string>("accountnumber")}");
            }
        }
        else
        {
            Console.WriteLine($"Failed to connect: {serviceClient.LastCrmError}");
        }
    }
}

3. Explanation

  • Authentication: The connection string uses AAD authentication with the client ID, client secret, and tenant ID.
  • Connection: CrmServiceClient establishes a connection to Dynamics 365.
  • Query: The QueryExpression retrieves data from the CRM, such as accounts in this example.

Note : This article was created with assistance from AI and there could be mistakes / error

Canvas app doesn’t show data from related records.

Solution : Refresh the Datasource and then save and publish the app . Detailed description is given below .

Description
I created a power apps with 2 text boxes where i am fetching logged in user’s Business unit and then country where he belongs .
Now , to make it clear
– i am using Dynamics 365 as a data source .
– tables involved , systemuser (User), business unit , country
i added a data source for User’s table .
Approach :
i add a global variable on start on the app where i got the user object based on the logged in user’s email address .I stored it in a variable called D365

I set the value of other 2 text boxes which should have the logged in user’s Business unit ID and country as shown below
D365User.'Business Unit'.Country.Name
D365User.'Business Unit'.Country.Country

Issue : However when i run the app it shows the data correctly for the 2 textboxes . However when i publish the app it doesn’t show any data .It showed “Getting Data ….” then blank

Solution : click “Refresh” Data source in the data source menu as shown below

then save and publish the app .