A PowerShell module for connecting to Microsoft Dataverse (used by Dynamics 365 and Power Apps) to query and manipulate data, solutions and customisations.
This module works in PowerShell Desktop and PowerShell Core, supporting Windows, Linux, and macOS.
- Creating, updating, upserting and deleting records, including M:M records
- Simple PowerShell objects for input and output instead of complex SDK Entity classes
- Automatic data type conversion using metadata - use friendly labels for choices and names for lookups
- Automatic lookup conversion - use record names instead of GUIDs (when unique)
- On behalf of (delegation) support for create/update operations
- Duplicate detection support for create/update/upsert operations
- Full support for automatic paging
- Concise PowerShell-friendly hashtable-based filters with grouped logical expressions (and/or/not/xor) and arbitrary nesting
- Batching and parallelisation support for efficient bulk operations
- Auto-retries support in many cmdlets
- Comprehensive metadata operations
- Create, read, update, and delete entities, attributes, option sets, and relationships
- manipulate model-driven apps, forms, views
- manipulate solutions and solution components
Note: On-premise Dataverse environments are not supported.
- An XrmToolbox plugin is also available to make getting started really easy: See the Rnwood.Dataverse.Data.PowerShell.XrmToolboxPlugin README for information.
# Set execution policy (one-time setup)
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope CurrentUser
# Install module
Install-Module Rnwood.Dataverse.Data.PowerShell -Scope CurrentUserFor detailed installation instructions, including versioning, see Installation Guide.
# Connect to Dataverse and set as default
# omit the -Url for a menu
Get-DataverseConnection -url https://myorg.crm11.dynamics.com -interactive -setasdefault
# Query records
Get-DataverseRecord -TableName contact -FilterValues @{ lastname = 'Smith' }
# Create a record
Set-DataverseRecord -TableName contact -InputObject @{
firstname = 'John'
lastname = 'Doe'
emailaddress1 = '[email protected]'
} -CreateOnly
# Update a record
Set-DataverseRecord -TableName contact -Id $contactId -InputObject @{
description = 'Updated via PowerShell'
}
# Delete a record
Remove-DataverseRecord -TableName contact -Id $contactId
For more advanced scenarios including metadata and customisations, see the documentation section below.
- Installation - How to install and update the module
- Quick Start Guide - Basic operations and PowerShell best practices
- Authentication Methods - All supported authentication methods
- Connection Management - Getting connected, default connections, named connections
- Querying Records - Filtering, paging, sorting, linking, SQL queries
- Creating and Updating Records - Create, update, upsert operations
- Deleting Records - Delete operations and SQL alternatives
- Record Access Management - Test, grant, list, and revoke record-level access rights
- Working with Metadata - Reading and managing schema (entities, attributes, relationships, option sets)
- Organization Settings - Getting and updating organization table columns and OrgDbOrgSettings XML
- Managing Web Resources - Upload, download, and manage web resources with file system integration
- Managing Forms - Creat, update, and managed forms
- View Management - Create, update, and manage system and personal views
- App Module Management - Create, update, and manage model-driven apps
- Environment Variables and Connection References - Managing configuration and connections
- Solution Management - Import, export, and manage solutions
- Solution Component Management - Managing individual components within solutions
- Error Handling and Batch Operations - Error handling and retry logic
- Parallelization - Parallel processing for best performance
- Use Cases - Real-world scenarios including CI/CD pipelines, data import/export, mass updates, and source control management
- Cmdlet Documentation - Full cmdlet reference with parameters and examples
Get-DataverseConnection— create or retrieve a connectionGet-DataverseRecord— query and retrieve recordsSet-DataverseRecord— create, update or upsert recordsRemove-DataverseRecord— delete records
Invoke-DataverseRequest— execute arbitrary SDK requestsInvoke-DataverseSql— run SQL queries against Dataverse
Invoke-DataverseRequest— execute arbitrary SDK requestsInvoke-DataverseSql— run SQL queries against Dataverse
Test-DataverseRecordAccess— test access rights a principal has for a recordGet-DataverseRecordAccess— list all principals with shared access to a recordSet-DataverseRecordAccess— grant or modify access rights for a principal on a recordRemove-DataverseRecordAccess— revoke access rights from a principal on a record
Get-DataverseView— retrieve system and personal viewsSet-DataverseView— create or update views with FetchXML or simplified filtersRemove-DataverseView— delete views
Get-DataverseAppModule— retrieve app modules (model-driven apps)Set-DataverseAppModule— create or update app modulesRemove-DataverseAppModule— delete app modules
Get-DataverseAppModuleComponent— retrieve components included in an app (entities, forms, views, etc.)Set-DataverseAppModuleComponent— add or update a component within an appRemove-DataverseAppModuleComponent— remove a component from an app
Get-DataverseWebResource— retrieve web resources with file supportSet-DataverseWebResource— create or update web resources from files or foldersRemove-DataverseWebResource— delete web resources
Get-DataverseSitemap— retrieve sitemap navigation definitionsSet-DataverseSitemap— create or update sitemap navigationRemove-DataverseSitemap— delete sitemap navigationGet-DataverseSitemapEntry— retrieve sitemap entries (Areas, Groups, SubAreas) with multilingual titlesSet-DataverseSitemapEntry— create or update navigation entries with multilingual supportRemove-DataverseSitemapEntry— remove navigation entries from sitemap
Get-DataverseEnvironmentVariableDefinition— query environment variable definitionsSet-DataverseEnvironmentVariableDefinition— create or update environment variable definitionsRemove-DataverseEnvironmentVariableDefinition— remove environment variable definitionsGet-DataverseEnvironmentVariableValue— query environment variable valuesSet-DataverseEnvironmentVariableValue— set environment variable valuesRemove-DataverseEnvironmentVariableValue— remove environment variable values
Get-DataverseConnectionReference— query connection referencesSet-DataverseConnectionReference— create or update connection reference valuesRemove-DataverseConnectionReference— remove connection references
Get-DataverseEntityMetadata— retrieve entity metadataGet-DataverseAttributeMetadata— retrieve attribute metadataGet-DataverseOptionSetMetadata— retrieve option set valuesGet-DataverseRelationshipMetadata— retrieve relationship metadataGet-DataverseEntityKeyMetadata— retrieve alternate key metadataSet-DataverseEntityMetadata— create or update entitiesSet-DataverseAttributeMetadata— create or update attributes (all types)Set-DataverseOptionSetMetadata— create or update global option setsSet-DataverseRelationshipMetadata— create relationships (OneToMany, ManyToMany)Set-DataverseEntityKeyMetadata— create alternate keys for entitiesRemove-DataverseEntityMetadata— delete entitiesRemove-DataverseAttributeMetadata— delete attributesRemove-DataverseRelationshipMetadata— delete relationshipsRemove-DataverseEntityKeyMetadata— delete alternate keys
Clear-DataverseMetadataCache— clear the metadata cache
Get-DataverseForm— retrieve form definitions with optional FormXml parsingSet-DataverseForm— create or update forms with FormXml supportRemove-DataverseForm— delete forms from entities
Tabs:
- [
Get-DataverseFormTab] — retrieve tabs from forms - [
Set-DataverseFormTab] — create or update form tabs - [
Remove-DataverseFormTab] — delete tabs from forms
Sections:
- [
Get-DataverseFormSection] — retrieve sections from form tabs - [
Set-DataverseFormSection] — create or update form sections - [
Remove-DataverseFormSection] — delete sections from forms
Controls:
- [
Get-DataverseFormControl] — retrieve controls from form sections - [
Set-DataverseFormControl] — create or update form controls (supports all standard control types and raw XML) - [
Remove-DataverseFormControl] — delete controls from forms
For operations not covered by the cmdlets above, use Invoke-DataverseRequest with SDK request objects to execute any Dataverse SDK operation directly. The cmdlet supports two main approaches:
- Request parameter set: Pass SDK request objects directly (returns raw SDK response objects)
- NameAndInputs parameter set: Specify request name and parameters as hashtable (returns converted PSObject by default, use
-Rawfor raw response)
See the Invoke-DataverseRequest documentation for details on response conversion and parameter sets.
- Report issues: GitHub Issues
- View source: GitHub Repository
See CONTRIBUTING.md for detailed guidelines.
See LICENSE file for details.
