CLI reference
This page is generated from the crm command tree.
crm
Stateful CLI for Microsoft Dynamics 365 CE — on-prem v9.x (NTLM) or Dataverse online (OAuth), over the Web API.
Usage:
crm [OPTIONS] [COMMAND] [ARGS]...
Options:
--json Emit machine-readable JSON output.
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys (JSON: per
row/record; human: table columns). Applied
after curation; the ok/error/meta envelope
is untouched.
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data in the
envelope. Implies --json. Mutually exclusive
with --fields. An invalid program is a usage
error (exit 2).
--dry-run Preview writes without issuing them; reads
run normally.
--profile TEXT Connection profile name (from the profiles/
dir under CRM_HOME; default ~/.crm).
--password TEXT Secret for this run (overrides the profile's
stored secret).
--log-level [debug|info|warning|error]
Log level (env: CRM_LOG_LEVEL). Default:
warning.
--verbose Alias for --log-level debug.
--log-format [text|json-line] Log output format (env: CRM_LOG_FORMAT).
Default: text.
--auth-scheme [ntlm|kerberos|negotiate|oauth]
Override the active profile's auth scheme
for this run. ntlm/kerberos/negotiate = on-
prem; oauth = cloud.
--stage-only Stage metadata changes without publishing
(env: CRM_STAGE_ONLY). Forces every
create/update command to --no-publish.
--retry-on-ambiguous Re-enable auto-retry of non-idempotent POST
creates on transport error / 429 / 503 (env:
CRM_RETRY_ON_AMBIGUOUS). Off by default: a
lost POST response may have committed.
--cache-metadata Read entity definitions from the persistent
on-disk cache (env: CRM_CACHE_METADATA).
Default off.
--refresh-metadata Force-refresh the on-disk metadata cache on
this call (one-shot; no env override).
--session TEXT Session name.
--version Show the version and exit.
-h, --help Show this message and exit.
crm action
Invoke OData functions and actions (unbound or bound).
Usage:
crm action [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm action function
Call an OData function — unbound by default, bound when --bind-set is given.
Functions issue a GET. Scalar params are encoded inline per OData v4; a
record-reference param ({"@odata.id": "
Usage:
crm action function [OPTIONS] NAME
Options:
--params TEXT JSON dict of function parameters.
--bind-set TEXT Entity set to bind the function to (e.g.
'systemusers'). Alone → collection-bound; with
--bind-id → record-bound.
--bind-id TEXT Record id to bind the function to. Requires --bind-
set.
--cast TEXT Namespace for the function when bound. Override only
for custom namespaces. [default:
Microsoft.Dynamics.CRM]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm action invoke
POST an OData action — unbound by default, bound when --bind-set/--bind-id given.
Usage:
crm action invoke [OPTIONS] NAME
Options:
--body TEXT JSON body for the action.
--body-file FILE
--bind-set TEXT Entity set name to bind the action to (e.g.
'workflows'). Requires --bind-id.
--bind-id TEXT Record id to bind the action to. Requires --bind-set.
--cast TEXT Namespace for the action when bound. Override only
for custom namespaces. [default:
Microsoft.Dynamics.CRM]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm app
Create and manage model-driven apps (appmodule).
Usage:
crm app [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm app add-components
Bind components to an app (AddAppComponents).
Usage:
crm app add-components [OPTIONS] APP_ID
Options:
--component TEXT Repeatable 'kind:guid' (kind:
view|chart|form|dashboard|sitemap|bpf). [required]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm app build-sitemap
Build a SiteMapXml from areas/groups/subareas and create the sitemap.
Usage:
crm app build-sitemap [OPTIONS] SITEMAP_NAME
Options:
--area TEXT Repeatable 'id[:Title]'. [required]
--group TEXT Repeatable 'areaId/groupId[:Title]'.
--subarea TEXT Repeatable
'areaId/groupId:entity=<logical>[:Title]'. Binds a
table via Entity=.
--unique-name TEXT App uniquename to link the sitemap to (sets
sitemapnameunique).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm app create
Create a model-driven app.
Usage:
crm app create [OPTIONS]
Options:
--name TEXT App display name. [required]
--unique-name TEXT Publisher-prefixed unique name, e.g.
'cwx_crmworx'. [required]
--description TEXT
--if-exists [error|skip]
--icon-webresource TEXT Web resource (name or GUID) for the app icon.
Defaults to the platform icon when omitted.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm app delete
Delete a model-driven app, sweeping FK-blocking dependent rows first.
Resolves NAME_OR_ID as an appmoduleid (GUID), else its uniquename, else its display name. Removes the dependent data rows that hold a record-level FK to the app (e.g. appsetting on on-prem) before deleting the app, and lists every record it removed. Refuses a managed app.
Usage:
crm app delete [OPTIONS] NAME_OR_ID
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm app remove-components
Unbind components from an app (RemoveAppComponents).
Usage:
crm app remove-components [OPTIONS] APP_ID
Options:
--component TEXT Repeatable 'kind:guid' (kind:
view|chart|form|dashboard|sitemap|bpf). [required]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm app set-sitemap
Create a sitemap from a SiteMapXml file.
Usage:
crm app set-sitemap [OPTIONS] SITEMAP_NAME
Options:
--xml-file FILE Path to a file containing the SiteMapXml.
[required]
--unique-name TEXT App uniquename to link the sitemap to (sets
sitemapnameunique).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm apply
Apply a declarative desired-state spec.
The spec declares a publisher, solution, entities (with attributes, option
sets, relationships, and views), web resources, security roles, and plug-ins
(assembly + types + steps + images), driven in dependency order with
PublishAllXml once at the end (web resources are published with everything
else; security roles and plug-in registration are not publishable). A web
resource's or plug-in assembly's file path is resolved relative to the spec
file. apply is convergent: a component that already
exists is reconciled against the spec — left untouched when it matches,
updated in place when an allowed field drifts, or refused (no write) when the
divergence would need a destructive drop-and-recreate (see ADR 0014). Emits
{ok, data:{applied, updated, skipped, replace_blocked, pruned, planned,
failed}, meta:{staged}}; a replace-blocked component makes ok=false (exit 1).
With the global --dry-run flag the same reconcile runs read-only and the
result is a full drift report — planned (would create), updated (would
update), replace_blocked, and pruned (solution components absent from the
spec, each {kind, name, deleted: false}) — assembled from live reads with no
write issued (#550). --prune opts in to deleting those extras (#553): schema-
only kinds under a confirmation, data-bearing kinds only with --allow-data-loss.
Usage:
crm apply [OPTIONS]
Options:
-f, --file FILE Path to the YAML or JSON desired-state spec.
Exactly one of -f/--file or --from-plan is
required.
--from-plan FILE Execute a saved plan (from `--dry-run apply
-o`) only if it is still exactly true.
Mutually exclusive with -f; its intent
(prune / allow-data-loss / stage-only) is
replayed, not re-specified. With --dry-run,
re-verifies without executing.
--include-referenced-optionsets / --no-include-referenced-optionsets
Add a picklist's referenced global option
set to the target solution (covers pre-
existing globals the create step skips).
[default: include-referenced-optionsets]
--prune Delete components in the target solution
that the spec no longer declares (schema-
only kinds). Requires a target solution and
a confirmation; preview with --dry-run
first.
--allow-data-loss With --prune, also delete data-bearing
extras (entities, attributes) — this
destroys their row data.
-o, --plan-out FILE Serialize the --dry-run drift report to this
path as a plan artifact (JSON). Valid only
with the global --dry-run flag. The plan is
always written, including when the dry-run
exits 1.
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm async
List, inspect, and cancel asynchronous operations.
Usage:
crm async [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm async cancel
Cancel a pending or suspended asyncoperation.
Usage:
crm async cancel [OPTIONS] ASYNC_OPERATION_ID
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm async get
Get one asyncoperation row.
Usage:
crm async get [OPTIONS] ASYNC_OPERATION_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm async list
List asyncoperation rows.
Usage:
crm async list [OPTIONS]
Options:
--state TEXT ready | suspended | locked | completed | <int>
--message TEXT Filter by messagename (e.g. ImportSolution).
--owner TEXT Filter by systemuser GUID.
--top INTEGER Page size per call (default 50).
--order-by TEXT OData $orderby expression (default: 'createdon
desc').
--filter TEXT Raw OData $filter expression to AND-join.
--all Follow @odata.nextLink until exhausted (caps at
--max-pages).
--max-pages INTEGER Safety cap on pagination depth when --all is set
(default 20).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm audit
Retrieve server-side audit change history (Web API audit functions).
Usage:
crm audit [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm audit detail
Retrieve the decoded AuditDetail for one audit row (RetrieveAuditDetails).
AUDIT_ID is the auditid GUID of a row in the audit table. The returned AuditDetail's concrete type is surfaced as AuditDetailType.
Usage:
crm audit detail [OPTIONS] AUDIT_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm audit history
Retrieve a record's audited data changes (RetrieveRecordChangeHistory).
ENTITY_SET is the target entity set (e.g. 'accounts'); RECORD_ID its GUID. Returns an AuditDetailCollection whose MoreRecords/PagingCookie/TotalRecordCount drive paging — pass the returned PagingCookie via --paging-cookie for the next page.
Usage:
crm audit history [OPTIONS] ENTITY_SET RECORD_ID
Options:
--page INTEGER 1-based page number to retrieve. [default: 1]
--count INTEGER Page size — audit rows to return per page. [default:
50]
--paging-cookie TEXT PagingCookie from a prior page's
AuditDetailCollection, to fetch the next page.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm batch
Execute a $batch from a JSON file.
Usage:
crm batch [OPTIONS] FILE_PATH
Options:
--no-transaction Send each op as a top-level operation; no changeset
wrapping.
--continue-on-error Send Prefer: odata.continue-on-error (requires --no-
transaction).
-o, --output FILE Write BatchResult[] JSON to this path.
--timeout INTEGER Override request timeout (seconds) for the batch
call.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm chart
Author system and user charts (savedqueryvisualization / userqueryvisualization) headlessly, without the chart designer.
Usage:
crm chart [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm chart add-series
Add an aggregate series to a chart (fetch attribute + measure + presentation series).
Usage:
crm chart add-series [OPTIONS] CHART_ID
Options:
--column TEXT Logical name of the column to aggregate.
[required]
--aggregate [count|countcolumn|sum|avg|min|max]
Aggregate function applied to --column.
[required]
--alias TEXT Unique alias for the new series. [required]
--user-owned Edit a user chart (userqueryvisualization)
instead of a system chart. User charts are
never published.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm chart create
Create a chart on ENTITY.
Modes (mutually exclusive): --data-description FILE + --presentation-description FILE XML-based chart authored from files in source control. --web-resource NAME Script-based visualization backed by a web resource.
Usage:
crm chart create [OPTIONS] ENTITY
Options:
--name TEXT Chart display name. [required]
--data-description FILE Path to the datadescription XML file (use
with --presentation-description; not with
--web-resource).
--presentation-description FILE
Path to the presentationdescription XML file
(use with --data-description; not with
--web-resource).
--web-resource TEXT Web resource name or GUID for a script-based
visualization (not with --data-description /
--presentation-description).
--user-owned Create a user chart (userqueryvisualization)
instead of a system chart.
--description TEXT Chart description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm chart delete
Delete a chart by CHART_ID.
Usage:
crm chart delete [OPTIONS] CHART_ID
Options:
--user-owned Delete a user chart instead of a system chart.
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm chart get
Get a single chart by CHART_ID (its XML included for --json export).
Usage:
crm chart get [OPTIONS] CHART_ID
Options:
--user-owned Look up a user chart instead of a system chart.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm chart list
List charts for ENTITY (system charts by default; --user-owned for user charts).
Usage:
crm chart list [OPTIONS] ENTITY
Options:
--user-owned List user charts instead of system charts.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm chart remove-series
Remove an aggregate series from a chart by its alias (refuses the last series).
Usage:
crm chart remove-series [OPTIONS] CHART_ID
Options:
--alias TEXT Alias of the series to remove. [required]
--user-owned Edit a user chart (userqueryvisualization) instead
of a system chart. User charts are never
published.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm chart set-fetch
Replace the inner
Usage:
crm chart set-fetch [OPTIONS] CHART_ID
Options:
--fetch FILE Path to a file with the replacement <fetch>
element. [required]
--user-owned Edit a user chart (userqueryvisualization) instead
of a system chart. User charts are never
published.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm chart set-groupby
Set a chart's grouping (category) column, optionally with a date grouping.
Usage:
crm chart set-groupby [OPTIONS] CHART_ID
Options:
--column TEXT Logical name of the grouping (category)
column. [required]
--dategrouping [day|week|month|quarter|year|fiscal-period|fiscal-year]
Date grouping interval (only for date
columns).
--user-owned Edit a user chart (userqueryvisualization)
instead of a system chart. User charts are
never published.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm chart update
Update a chart's XML, name/description, or series chart type.
On a partial XML update (only one of --data-description / --presentation-description) the other column is read live so the alias-coupling pair is validated together. The chart's host entity (primaryentitytypecode) is never changed.
Usage:
crm chart update [OPTIONS] CHART_ID
Options:
--data-description FILE Replace the datadescription XML from this
file.
--presentation-description FILE
Replace the presentationdescription XML from
this file.
--name TEXT New chart display name.
--description TEXT New chart description.
--type TEXT Set the chart type (ChartType) on every
series, e.g. Column, Bar, Line, Pie.
--user-owned Edit a user chart (userqueryvisualization)
instead of a system chart. User charts are
never published.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm completion
Print or install shell completion for bash, zsh, fish, or PowerShell.
Usage:
crm completion [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm completion install
Cache the completion script under CRM_HOME and print the rc line to source it.
Idempotent: re-running rewrites the same script + marker. Never edits a shell
rc file — it only prints the one source <path> line for you to add.
Usage:
crm completion install [OPTIONS]
Options:
--shell [zsh|bash|fish|powershell]
Target shell. Defaults to autodetecting
$SHELL.
--path FILE Where to write the script. Default:
${CRM_HOME}/completion/crm.<shell>.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm completion show
Print the completion source script to stdout (does not write anything).
Usage:
crm completion show [OPTIONS]
Options:
--shell [zsh|bash|fish|powershell]
Target shell. Defaults to autodetecting
$SHELL.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm connection
Diagnose the active connection (WhoAmI, reachability, doctor).
Profiles and stored secrets are managed under crm profile.
Usage:
crm connection [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm connection doctor
Diagnose the connection: DNS/TCP, TLS, api_version, auth, rate-limit.
Usage:
crm connection doctor [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm connection status
Show the active session + profile (no network call).
Usage:
crm connection status [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm connection test
Reachability check: WhoAmI + report API base.
Usage:
crm connection test [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm connection whoami
Issue WhoAmI() against the server, with the serving profile/org/URL.
Usage:
crm connection whoami [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm connectionrole
Define record-to-record connection roles (create / scope / match).
Usage:
crm connectionrole [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm connectionrole create
Create a connection role named NAME.
Usage:
crm connectionrole create [OPTIONS]
Options:
--name TEXT Connection role name. [required]
--category [business|family|other|sales|sales-team|service|social|stakeholder]
Connection role category.
--description TEXT Role description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm connectionrole match
Pair ROLE_A and ROLE_B (each a name or id) as reciprocal roles.
Usage:
crm connectionrole match [OPTIONS] ROLE_A ROLE_B
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm connectionrole scope
Restrict ROLE (name or id) to records of ENTITY.
Call repeatedly to scope a role to several entity types.
Usage:
crm connectionrole scope [OPTIONS] ROLE
Options:
--entity TEXT Entity logical name the role applies to. [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard
Author organization-owned system dashboards (systemform type=0) from FormXml headlessly, without the dashboard designer.
Usage:
crm dashboard [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm dashboard add-chart
Add a chart tile (ChartGrid) to dashboard DASHBOARD_ID's FormXml.
Usage:
crm dashboard add-chart [OPTIONS] DASHBOARD_ID
Options:
--view TEXT savedquery id (GUID) whose data the grid shows.
[required]
--chart TEXT savedqueryvisualization id (GUID) to render; its
primary entity must match the view's. [required]
--force Add beyond the default six-component cap.
--colspan INTEGER RANGE Cell colspan. [default: 1; x>=1]
--rowspan INTEGER RANGE Cell rowspan; the section is padded to match it.
[default: 1; x>=1]
--section TEXT Add to an existing section (name or id); default:
a new section per tile (one component per
section).
--tab TEXT Target tab (name or id; default: first tab).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard add-iframe
Add an IFRAME tile to dashboard DASHBOARD_ID's FormXml.
Usage:
crm dashboard add-iframe [OPTIONS] DASHBOARD_ID
Options:
--url TEXT The IFRAME URL (must be non-empty). [required]
--security Restrict cross-frame scripting (the FormXml
Security flag).
--scrolling Show IFRAME scrollbars.
--border Draw a border around the IFRAME.
--pass-parameters Pass record object-type code and id as URL
parameters.
--force Add beyond the default six-component cap.
--colspan INTEGER RANGE Cell colspan. [default: 1; x>=1]
--rowspan INTEGER RANGE Cell rowspan; the section is padded to match it.
[default: 1; x>=1]
--section TEXT Add to an existing section (name or id); default:
a new section per tile (one component per
section).
--tab TEXT Target tab (name or id; default: first tab).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard add-view
Add a view-only grid tile (ChartGrid) to dashboard DASHBOARD_ID's FormXml.
Usage:
crm dashboard add-view [OPTIONS] DASHBOARD_ID
Options:
--view TEXT savedquery id (GUID) whose data the grid
shows. [required]
--mode [list|all] Grid only (list) or grid with the chart
toggle (all). [default: list]
--records-per-page INTEGER RANGE
Rows shown per page in the grid. [default:
10; x>=1]
--force Add beyond the default six-component cap.
--colspan INTEGER RANGE Cell colspan. [default: 1; x>=1]
--rowspan INTEGER RANGE Cell rowspan; the section is padded to match
it. [default: 1; x>=1]
--section TEXT Add to an existing section (name or id);
default: a new section per tile (one
component per section).
--tab TEXT Target tab (name or id; default: first tab).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm dashboard add-webresource
Add a web-resource tile to dashboard DASHBOARD_ID's FormXml.
Usage:
crm dashboard add-webresource [OPTIONS] DASHBOARD_ID
Options:
--webresource TEXT Web resource id (GUID) or unique name to embed.
[required]
--force Add beyond the default six-component cap.
--colspan INTEGER RANGE Cell colspan. [default: 1; x>=1]
--rowspan INTEGER RANGE Cell rowspan; the section is padded to match it.
[default: 1; x>=1]
--section TEXT Add to an existing section (name or id); default:
a new section per tile (one component per
section).
--tab TEXT Target tab (name or id; default: first tab).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard create
Create an organization-owned system dashboard from a FormXml file.
Usage:
crm dashboard create [OPTIONS]
Options:
--name TEXT Dashboard display name. [required]
--formxml FILE Path to the dashboard FormXml file. [required]
--description TEXT Dashboard description.
--interactive (Rejected) interactive-experience (type-10)
dashboards are not creatable over the Web API —
see the error for details.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard delete
Delete a dashboard by DASHBOARD_ID.
Usage:
crm dashboard delete [OPTIONS] DASHBOARD_ID
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard get
Get a single dashboard by DASHBOARD_ID (its FormXml included for export).
Usage:
crm dashboard get [OPTIONS] DASHBOARD_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard list
List organization-owned dashboards.
Usage:
crm dashboard list [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dashboard remove-component
Remove one component from dashboard DASHBOARD_ID, selected by exactly one of --cell-id / --index / --view / --chart / --url.
Usage:
crm dashboard remove-component [OPTIONS] DASHBOARD_ID
Options:
--cell-id TEXT Remove the component cell with this id.
--index INTEGER Remove the component at this 0-based position.
--view TEXT Remove the component whose ViewId is this
savedquery id.
--chart TEXT Remove the component whose VisualizationId is this
id.
--url TEXT Remove the IFRAME/web-resource component with this
Url.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm data
Bulk CSV/JSON dataset import/export.
Usage:
crm data [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm data delete
Submit a server-side BulkDelete job for records matching a FetchXML query.
The Web API's BulkDelete action takes a QueryExpression, so the FetchXML is converted server-side before submission (raw OData $filter is not accepted). Returns the job's async-operation id; pass --wait to poll to completion.
Usage:
crm data delete [OPTIONS] ENTITY_SET
Options:
--fetchxml TEXT FetchXML <fetch> document selecting the records to
delete.
--fetchxml-file FILENAME Read the FetchXML from a file instead of
--fetchxml.
--job-name TEXT Name for the bulk-delete system job (default
derived from the entity).
--wait Block until the job finishes, then report
succeeded/failed counts.
--timeout INTEGER Seconds to wait under --wait (default: the
profile's async timeout).
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm data export
Export records from an entity set to a CSV/JSON file.
Pages through the entity set (--page-size per request, capped by
--max-records), narrowing columns with --select and rows with an OData
--filter, and writes the result to --output. --format is optional —
when omitted it is inferred from the output file's suffix (.csv → csv, else
json).
Usage:
crm data export [OPTIONS] ENTITY_SET
Options:
-o, --output FILE [required]
--select TEXT
--filter TEXT OData $filter.
--page-size INTEGER
--max-records INTEGER
--format [csv|json]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm data import
Bulk-import records from a JSONL/CSV file via $batch.
Usage:
crm data import [OPTIONS] ENTITY_SET INPUT_FILE
Options:
--format [jsonl|csv] Input format; inferred from suffix when
omitted (.csv→csv, else jsonl).
--mode [create|upsert|delete] create=POST new records; upsert=PATCH by GUID
(--id-column) or by alternate key (--key);
delete=DELETE by GUID (--id-column) or by
alternate key (--key).
--id-column TEXT Column/key holding the record GUID (for
--mode upsert/delete; mutually exclusive with
--key).
--key ATTR[,ATTR...] Upsert by an alternate key instead of the
primary GUID: one attribute, or a comma-
separated composite key. Values are read from
each row. Mutually exclusive with --id-
column.
--chunk-size INTEGER Records per $batch call (each chunk is one
transactional changeset by default).
--no-transaction Send each op as a top-level operation; no
changeset wrapping.
--continue-on-error Send Prefer: odata.continue-on-error
(requires --no-transaction).
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also
valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm describe
Emit a machine-readable catalogue of all commands, options, and choices.
With no argument, walks the whole tree. With GROUP, walks only that command's subtree — importing just that one module (a lazy win over the full walk).
Usage:
crm describe [OPTIONS] [GROUP]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm doctor
Diagnose the connection: DNS/TCP, TLS, api_version, auth, rate-limit.
Usage:
crm doctor [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup
Manage duplicate-detection rules (duplicaterule / duplicaterulecondition).
Usage:
crm dup [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm dup add-condition
Add a match condition to RULE (name or id).
--operator one of: exact, same-first, same-last, same-date, same-datetime, exact-picklist-label, exact-picklist-value. The same-first / same-last operators require --operator-param N (the character count); the others reject it.
Usage:
crm dup add-condition [OPTIONS] RULE
Options:
--attr TEXT Base column logical name to compare.
[required]
--operator [exact|same-first|same-last|same-date|same-datetime|exact-picklist-label|exact-picklist-value]
Match operator for the condition.
[required]
--matching-attr TEXT Matching column logical name (defaults to
--attr).
--operator-param INTEGER Character count N for same-first / same-last
operators.
--ignore-blank-values Treat blank values as non-duplicates (do not
match on null).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm dup bulk-detect
Sweep ENTITY for duplicates via the async BulkDetectDuplicates job.
Detects duplicates among ENTITY rows according to the published duplicate rules for that table and logs them as duplicaterecord rows. Sweeps the whole table by default, or the records matched by --fetchxml. Returns the job id immediately; pass --wait to poll to completion and list the detected duplicates. Detection only — nothing is merged or deleted.
Usage:
crm dup bulk-detect [OPTIONS] ENTITY
Options:
--fetchxml TEXT FetchXML <fetch> narrowing the swept records (its
<entity> must be ENTITY). Omit to sweep the whole
table.
--fetchxml-file FILENAME Read the narrowing FetchXML from a file instead of
--fetchxml.
--job-name TEXT Name for the detection system job (default derived
from ENTITY).
--wait Block until the job finishes, then report the
detected duplicates.
--timeout INTEGER Seconds to wait under --wait (default: the
profile's async timeout).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup check
Test a candidate ENTITY record against the published rules (RetrieveDuplicates).
Supply the candidate record's column values via --data-file or --data. Only published rules on a duplicate-detection-enabled entity match; with no published rule the result is always empty.
Usage:
crm dup check [OPTIONS] ENTITY
Options:
--data-file TEXT Path to a JSON file with the candidate record's
column values.
--data TEXT Inline JSON object of the candidate record's column
values.
--matching-entity TEXT Matching entity logical name (defaults to ENTITY).
--top INTEGER Maximum number of matches to return. [default: 50]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup create
Create an (unpublished) duplicate-detection rule on ENTITY.
The rule is created unpublished — add conditions with dup add-condition,
then activate it with dup publish.
Usage:
crm dup create [OPTIONS] ENTITY
Options:
--name TEXT Rule display name. [required]
--matching-entity TEXT Matching entity logical name (defaults to ENTITY).
--description TEXT Rule description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup get
Show one rule (by name or id) and the conditions it carries.
Usage:
crm dup get [OPTIONS] RULE
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup list
List duplicate-detection rules.
Usage:
crm dup list [OPTIONS]
Options:
--entity TEXT Filter to rules whose base entity is this logical
name.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup publish
Publish RULE (name or id) — submits the async PublishDuplicateRule job.
The rule must carry at least one condition. Without --wait the command returns once the job is submitted; with --wait it polls to completion.
Usage:
crm dup publish [OPTIONS] RULE
Options:
--wait Block until the async publish job completes.
--timeout INTEGER Seconds to wait for the job (with --wait).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm dup unpublish
Unpublish RULE (name or id) — UnpublishDuplicateRule (synchronous).
Usage:
crm dup unpublish [OPTIONS] RULE
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity
Record CRUD against entity sets (accounts, contacts, ...).
Usage:
crm entity [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm entity associate
Associate two records via a collection-valued nav property (1:N from one-side or N:N).
Usage:
crm entity associate [OPTIONS] TARGET_SET TARGET_ID NAV RELATED_SET RELATED_ID
Options:
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity children
Per-relationship related-record counts for the 1:N relationships where
Each row: child entity logical name, referencing attribute, child entity set, and count. Read-only (composes with --dry-run).
Usage:
crm entity children [OPTIONS] ENTITY_SET RECORD_ID
Options:
--non-empty Drop relationships whose related-record count is 0.
--filter-entities REGEX Only count child entities whose logical name
matches REGEX. Applied before querying — fewer
requests, not a post-filter.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global;
also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity clear-lookup
Clear a single-valued lookup via DELETE /$ref.
Usage:
crm entity clear-lookup [OPTIONS] ENTITY_SET RECORD_ID NAV
Options:
--yes Skip interactive confirmation.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity clone
Clone a single record, optionally its children.
Copies
--with-children also clones the direct child rows of every custom 1:N relationship where this record is the parent (one level — no recursion). A child create that fails does not roll back or abort: the rest continue and the envelope reports ok=false with meta.created (parent + per-entity child ids) and data.failures (entity, source id, reason). Recover by cloning the failed rows individually — never re-run the whole verb.
Usage:
crm entity clone [OPTIONS] ENTITY_SET RECORD_ID
Options:
--override FIELD=VALUE Repeatable. Set/replace a field on the clone.
VALUE is parsed as JSON, else taken as a
string. The key passes raw, so
'ownerid@odata.bind=/systemusers(<id>)' re-adds
a never-copy field.
--unset FIELD Repeatable. Drop a field (logical name) from
the clone; a lookup's logical name drops the
bind it produced.
--no-return Don't request the record back; return just the
new GUID.
--with-children Also clone the direct child rows of every
custom 1:N relationship where this record is
the parent (one level deep). --override/--unset
apply to the parent only.
--skip-child-entity LOGICAL Repeatable. With --with-children, exclude this
child entity (logical name) from cloning — e.g.
an org-specific plugin-derived table.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm entity create
POST a new record.
Usage:
crm entity create [OPTIONS] ENTITY_SET
Options:
--data TEXT JSON object as string.
--data-file FILE Path to a JSON file with the record body.
--no-return Don't request the record back; just GUID.
--return-record Ask server to return the created row (the default
for create).
--validate Pre-write field-name check (1-3 metadata GETs);
blocks unknown fields with did-you-mean.
Composable with --dry-run.
--full Human mode: show every field including nulls and
@odata.* plumbing. Default human output is concise
(populated fields only, new id first). No effect
in --json mode.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity delete
DELETE a record.
Usage:
crm entity delete [OPTIONS] ENTITY_SET RECORD_ID
Options:
--if-match ETAG Optimistic concurrency etag.
--yes Skip interactive confirmation.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity disassociate
Disassociate two records. Omit --related-* for single-valued lookups.
Usage:
crm entity disassociate [OPTIONS] TARGET_SET TARGET_ID NAV
Options:
--related-set TEXT Required for collection-valued nav properties.
--related-id TEXT Required for collection-valued nav properties.
--yes Skip interactive confirmation.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity get
GET
Usage:
crm entity get [OPTIONS] ENTITY_SET RECORD_ID
Options:
--select TEXT Repeatable; column names.
--expand TEXT Repeatable; navigation properties.
--annotations / --no-annotations
Include formatted values.
--minimal JSON mode: drop every key containing '@'
(OData annotations like @odata.etag,
*@FormattedValue, *@lookuplogicalname);
keeps business fields, _*_value lookup
GUIDs, and the primary id.
--expect ATTR=VALUE Repeatable; assert str(record[ATTR]) ==
VALUE (an absent key never matches). Any
mismatch exits 1 (the --json envelope
carries meta {attr, expected, actual}; human
mode prints the error line); all match exits
0.
--full Human mode: show every field including nulls
and @odata.* plumbing. Default human output
is concise (populated fields only, id
first). No effect in --json mode.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm entity set-lookup
Set a single-valued lookup via @odata.bind PATCH.
Usage:
crm entity set-lookup [OPTIONS] ENTITY_SET RECORD_ID NAV RELATED_SET
RELATED_ID
Options:
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity update
PATCH an existing record.
Usage:
crm entity update [OPTIONS] ENTITY_SET RECORD_ID
Options:
--data TEXT JSON object as string.
--data-file FILE Path to a JSON file with the record body.
--allow-create Permit upsert (skip If-Match header).
--return-record Ask server to return the updated row (update is
silent by default).
--no-return Don't request the record back (the default for
update).
--if-match ETAG Optimistic concurrency etag. Example (POSIX):
--if-match 'W/"123"'. Use --if-match "*" to
require any current version.
--validate Pre-write field-name check (1-3 metadata GETs);
blocks unknown fields with did-you-mean.
Composable with --dry-run.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm entity upsert
PATCH with create-if-missing semantics (by GUID, or --key alternate key).
Usage:
crm entity upsert [OPTIONS] ENTITY_SET [RECORD_ID]
Options:
--key ATTR[,ATTR...] Upsert by an alternate key instead of the primary
GUID: one attribute, or a comma-separated
composite key. Values are read from --data, so
omit the RECORD_ID. Mutually exclusive with it.
--data TEXT JSON object as string.
--data-file FILE Path to a JSON file with the record body.
--if-none-match Create-only: send If-None-Match: * so the write
succeeds only if the record does not already exist
(412 precondition error when it does). The
complement to update's --if-match.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm examples
Browse a curated gallery of runnable example commands.
With no GROUP on a terminal, pick a group then an example; the chosen command is printed for you to copy and edit. With GROUP, jump straight to that group's examples. Under --json or when not on a terminal, prints the full listing.
Usage:
crm examples [OPTIONS] [GROUP]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm fieldsec
Manage field security profiles and column-level permissions.
Usage:
crm fieldsec [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm fieldsec add-permission
Grant column permissions on ENTITY.ATTRIBUTE for PROFILE (name or id).
Pass at least one of --read / --create / --update.
Usage:
crm fieldsec add-permission [OPTIONS] PROFILE ENTITY ATTRIBUTE
Options:
--read Grant read access to the column.
--create Grant create access to the column.
--update Grant update access to the column.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm fieldsec assign
Assign PROFILE (name or id) to a user or a team.
Pass exactly one of --user-id / --team.
Usage:
crm fieldsec assign [OPTIONS] PROFILE
Options:
--user-id TEXT System user id to assign.
--team TEXT Team id to assign.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm fieldsec create-profile
Create a field security profile named NAME.
Usage:
crm fieldsec create-profile [OPTIONS] NAME
Options:
--description TEXT Profile description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm fieldsec get
Show one profile (by name or id) and the field permissions it grants.
Usage:
crm fieldsec get [OPTIONS] PROFILE
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm fieldsec list
List all field security profiles.
Usage:
crm fieldsec list [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form
Read and clone entity forms.
Usage:
crm form [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm form add-field
Add a field to an entity form (resolves the control type from metadata).
Usage:
crm form add-field [OPTIONS] ENTITY ATTRIBUTE
Options:
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--tab TEXT Target tab by name or id (default: the first tab).
--section TEXT Target section by name or id (default: the first
section).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form add-handler
Wire a JS event handler on an entity form (registering its library).
Usage:
crm form add-handler [OPTIONS] ENTITY
Options:
--event [onload|onsave|onchange]
Form event to wire the handler to.
[required]
--library TEXT Unique name of the JS web resource holding
the function (it must already exist).
[required]
--function TEXT JS function to call when the event fires
(e.g. App.onLoad). [required]
--field TEXT Attribute whose onchange fires the handler
(required for --event onchange; invalid
otherwise).
--param TEXT Parameter passed to the function
(repeatable; emitted as a comma-separated
list).
--pass-context / --no-pass-context
Pass the execution context as the function's
first parameter. Default: pass.
--enabled / --no-enabled Whether the handler is enabled. Default:
enabled.
--form TEXT Target form by name or id (default: the sole
main form, or the primary form if the entity
has several).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm form add-library
Register a JS script library on an entity form (idempotent).
Usage:
crm form add-library [OPTIONS] ENTITY
Options:
--library TEXT Unique name of the JS web resource to register (it
must already exist — the editor never creates it).
[required]
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form add-section
Add a section to a tab of an entity form.
Usage:
crm form add-section [OPTIONS] ENTITY NAME
Options:
--tab TEXT Target tab by name or id (default: the first tab).
--label TEXT Display label for the new tab/section (default:
its name).
--columns INTEGER Layout columns (1-4): a new tab's layout columns,
or a new section's cell columns. [default: 1]
--after TEXT Place/move after this sibling tab or section (by
name or id). Add appends to the end by default;
move goes first.
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form add-tab
Add a tab (with a starter section) to an entity form.
Usage:
crm form add-tab [OPTIONS] ENTITY NAME
Options:
--label TEXT Display label for the new tab/section (default:
its name).
--columns INTEGER Layout columns (1-4): a new tab's layout columns,
or a new section's cell columns. [default: 1]
--after TEXT Place/move after this sibling tab or section (by
name or id). Add appends to the end by default;
move goes first.
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form clone
Clone a named form to another entity.
Usage:
crm form clone [OPTIONS] ENTITY FORM_NAME
Options:
--to TEXT Target entity logical name. [required]
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form export
Export a form's formxml.
Usage:
crm form export [OPTIONS] ENTITY FORM_NAME
Options:
-o, --output FILE Write the formxml to this file instead of stdout.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form list
List an entity's forms (main forms by default).
Usage:
crm form list [OPTIONS] ENTITY
Options:
--type [dashboard|main|quickview|quickcreate|dialog|card]
Form type to list (repeatable). Default:
main.
--all List every form type (cannot be combined
with --type).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm form list-handlers
List the JS event handlers wired on an entity form.
Usage:
crm form list-handlers [OPTIONS] ENTITY
Options:
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has several).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form move-section
Reorder a section within its tab on an entity form.
Usage:
crm form move-section [OPTIONS] ENTITY SECTION
Options:
--tab TEXT Target tab by name or id (default: the first tab).
--after TEXT Place/move after this sibling tab or section (by
name or id). Add appends to the end by default;
move goes first.
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form move-tab
Reorder a tab on an entity form (to the front, or after --after).
Usage:
crm form move-tab [OPTIONS] ENTITY TAB
Options:
--after TEXT Place/move after this sibling tab or section (by
name or id). Add appends to the end by default;
move goes first.
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form remove-field
Remove a field from an entity form.
Usage:
crm form remove-field [OPTIONS] ENTITY ATTRIBUTE
Options:
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form remove-handler
Remove a JS event handler from an entity form.
Usage:
crm form remove-handler [OPTIONS] ENTITY
Options:
--event [onload|onsave|onchange]
Form event to wire the handler to.
[required]
--function TEXT JS function name of the handler to remove.
[required]
--field TEXT Attribute whose onchange fires the handler
(required for --event onchange; invalid
otherwise).
--form TEXT Target form by name or id (default: the sole
main form, or the primary form if the entity
has several).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm form remove-section
Remove a section from a tab of an entity form (refuses a section holding bound fields without --force).
Usage:
crm form remove-section [OPTIONS] ENTITY SECTION
Options:
--tab TEXT Target tab by name or id (default: the first tab).
--force Remove even if it still holds bound fields
(orphaning them; the orphaned fields are surfaced
in the output).
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form remove-tab
Remove a tab from an entity form (refuses the only tab, or a tab holding bound fields without --force).
Usage:
crm form remove-tab [OPTIONS] ENTITY TAB
Options:
--force Remove even if it still holds bound fields
(orphaning them; the orphaned fields are surfaced
in the output).
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form rename-section
Set a section's display label on an entity form.
Usage:
crm form rename-section [OPTIONS] ENTITY SECTION
Options:
--tab TEXT Target tab by name or id (default: the first tab).
--label TEXT New display label for the section. [required]
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form rename-tab
Set a tab's display label (its logical name is left intact).
Usage:
crm form rename-tab [OPTIONS] ENTITY TAB
Options:
--label TEXT New display label for the tab. [required]
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form set-field
Move an existing field to a different tab/section of an entity form.
Usage:
crm form set-field [OPTIONS] ENTITY ATTRIBUTE
Options:
--form TEXT Target form by name or id (default: the sole main
form, or the primary form if the entity has
several).
--tab TEXT Target tab by name or id (default: the first tab).
--section TEXT Target section by name or id (default: the first
section).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm form set-field-props
Toggle presentation properties of an existing field on an entity form.
Usage:
crm form set-field-props [OPTIONS] ENTITY ATTRIBUTE
Options:
--locked / --unlocked Lock the field against being moved/removed
on the form (cell locklevel).
--disabled / --enabled Make the field read-only (control disabled).
--show-label / --no-show-label Show the field's label (cell showlabel).
--visible / --hidden Show the field on the form (cell visible).
--required LEVEL Required-level is attribute metadata, not a
form property; passing it here routes you to
`crm metadata update-attribute --required`
instead of silently no-op'ing.
--form TEXT Target form by name or id (default: the sole
main form, or the primary form if the entity
has several).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata
Browse entity / attribute / relationship metadata.
Usage:
crm metadata [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm metadata add-attribute
Add an attribute (column) to an existing entity.
Usage:
crm metadata add-attribute [OPTIONS] ENTITY
Options:
--kind [string|memo|integer|bigint|decimal|double|money|boolean|datetime|picklist|multiselect|lookup|customer|image|file]
Attribute kind. [required]
--schema-name TEXT PascalCase with publisher prefix, e.g.
'new_Amount'. Defaults to
<publisher_prefix>_<Display> from the
profile.
--display TEXT UI label. [required]
--description TEXT
--required [None|Recommended|ApplicationRequired]
--max-length INTEGER String/memo: max characters (default
100/2000).
--format TEXT String: Text|Email|Url|Phone|TextArea.
Datetime: DateOnly|DateAndTime.
--auto-number-format TEXT String: Auto-number format pattern (e.g.
'INV-{SEQNUM:5}').
--behavior [UserLocal|DateOnly|TimeZoneIndependent]
Datetime: DateTimeBehavior. Omit for the
server default (UserLocal).
--min FLOAT Numeric kinds: minimum value.
--max FLOAT Numeric kinds: maximum value.
--precision INTEGER Decimal/double/money: precision (decimals).
--true-label TEXT Boolean: label for true.
--false-label TEXT Boolean: label for false.
--default-value TEXT Boolean: 'true'/'false'. Picklist: int
option value.
--optionset-name TEXT Picklist/multiselect: reference an existing
global option set.
--option TEXT Picklist/multiselect: inline option as
'value:label' or ':label' (auto value).
Repeatable.
--target-entity TEXT Lookup: referenced entity logical name.
--relationship-schema TEXT Lookup: override auto-generated relationship
name.
--max-size-kb INTEGER File: max attachment size in KB. Default
32768.
--type [simple|rollup|calculated]
Column source: simple (default), or
rollup/calculated — the latter two turn the
--kind column into a rollup/calculated field
and require --formula-file.
--formula-file FILE Rollup/calculated: path to the formula XAML
file. Sent verbatim — the formula body is
officially editor-authored, so hand-written
XAML is unsupported (not validated here).
--audit / --no-audit Enable/disable auditing (IsAuditEnabled).
Requires org-level auditing to be turned on
for audit records to be written; omit to
leave unchanged.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--if-exists [error|skip] If the attribute already exists: error
(default) or skip (no-op success).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata attribute
Show a single attribute definition.
Usage:
crm metadata attribute [OPTIONS] LOGICAL_NAME ATTRIBUTE_NAME
Options:
--expect ATTR=VALUE Repeatable; assert str(record[ATTR]) == VALUE (an
absent key never matches). Any mismatch exits 1 (the
--json envelope carries meta {attr, expected,
actual}; human mode prints the error line); all match
exits 0.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata attributes
List attributes for an entity.
Usage:
crm metadata attributes [OPTIONS] LOGICAL_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata cache-clear
Delete the active profile's on-disk metadata cache.
Usage:
crm metadata cache-clear [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata can-relate
Check whether ENTITY can take part in a relationship (read-only).
Without --valid-partners, answers the yes/no eligibility check for the role. With --valid-partners, lists the legal partner tables. Use this before create-one-to-many / create-many-to-many to avoid a server-side fault.
Usage:
crm metadata can-relate [OPTIONS] ENTITY
Options:
--as [referenced|referencing|many-to-many]
Role to test: referenced (1 side),
referencing (N side), or many-to-many.
[required]
--valid-partners List the tables ENTITY may legally pair with
(GetValid* functions) instead of the yes/no
eligibility check. Note: many-to-many lists
ALL N:N-capable tables org-wide, not
partners specific to ENTITY.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata changes
Retrieve new/changed metadata since a version stamp (RetrieveMetadataChanges).
Save the returned server_version_stamp and pass it as --since next time to sync only what changed (plus a deleted_count). Omit --since for a baseline.
Usage:
crm metadata changes [OPTIONS]
Options:
--since TEXT Prior ServerVersionStamp; return only metadata
changed since it. Omit for a baseline snapshot that
returns a fresh stamp to save.
--entity TEXT Scope to an entity logical name (repeatable). Omit to
query every table — heavy on a baseline call.
--attributes Include attribute (column) definitions so column-
level changes show.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata clone-entity
Duplicate a custom entity (skeleton + opt-in forms/views/workflows/charts).
Pure Web API -- no XML. The ribbon is not cloned (no API write path; the result carries a ribbon_note saying so). N:N relationships and the source's parent-side relationships are not cloned.
Usage:
crm metadata clone-entity [OPTIONS] SOURCE NEW_SCHEMA_NAME
Options:
--display TEXT Display name for the clone. Default: '<source
display> (Clone)'.
--with-forms Clone the source's main forms onto the clone.
--with-views Clone the source's public views onto the clone.
--with-workflows Clone the source's classic workflows / business
rules onto the clone.
--with-charts Clone the source's public system charts onto the
clone.
--with-all Enable --with-forms, --with-views, --with-
workflows, and --with-charts.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata create-entity
Create a new custom entity (table).
Pass --external-name/--external-collection-name/--data-provider to create a VIRTUAL table instead, backed by an external data source. Virtual tables are read-only on v9.1 and require the data-provider/data-source records to exist first.
Usage:
crm metadata create-entity [OPTIONS]
Options:
--schema-name TEXT PascalCase with publisher prefix, e.g.
'new_Project'. Defaults to
<publisher_prefix>_<Display> from the
profile.
--display TEXT Singular UI label, e.g. 'Project'.
[required]
--display-collection TEXT Plural UI label. Defaults to <display>+'s'.
--primary-attr TEXT Schema name of the primary name attribute
(default '<prefix>_Name').
--primary-label TEXT UI label for primary attribute. Default
'Name'.
--primary-max-length INTEGER Max length for primary name string column.
Default 200.
--description TEXT
--ownership [UserOwned|OrganizationOwned]
--has-activities
--has-notes
--is-activity Create as an activity entity.
--audit / --no-audit Enable/disable auditing (IsAuditEnabled).
Requires org-level auditing to be turned on
for audit records to be written; omit to
leave unchanged.
--data-provider TEXT Virtual-table data-provider record GUID.
Setting any --external-* / --data-* option
creates a VIRTUAL table (rows live in an
external store). Virtual tables are READ-
ONLY on v9.1 and require the data-provider
(and optional data-source) records to exist
FIRST — configure those prerequisites before
running this.
--data-source TEXT Virtual-table data-source record GUID
(optional).
--external-name TEXT External table name a virtual table maps to
(required for virtual).
--external-collection-name TEXT
External collection/plural name (required
for virtual).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--if-exists [error|skip] If the entity already exists: error
(default) or skip (no-op success).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata create-key
Create an alternate key on an entity.
Usage:
crm metadata create-key [OPTIONS] ENTITY
Options:
--name TEXT Alternate key schema name, PascalCase with
publisher prefix, e.g. 'new_Code'. Defaults to
<prefix>_<display> from the profile.
--key-attributes TEXT Comma-separated attribute logical names forming
the key, e.g. 'accountnumber' or
'firstname,emailaddress1'. [required]
--display TEXT UI label. Defaults to the schema name.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--if-exists [error|skip] If the key already exists: error (default) or skip
(no-op success).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata create-many-to-many
Create an N:N relationship via the dedicated action.
Usage:
crm metadata create-many-to-many [OPTIONS]
Options:
--schema-name TEXT [required]
--entity1 TEXT [required]
--entity2 TEXT [required]
--intersect-entity TEXT [required]
--entity1-menu-label TEXT
--entity1-menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
--entity1-menu-order INTEGER
--entity2-menu-label TEXT
--entity2-menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
--entity2-menu-order INTEGER
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--if-exists [error|skip] If the relationship already exists: error
(default) or skip (no-op success).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata create-mapping
Create a field mapping on a 1:N relationship, or --auto generate them.
Usage:
crm metadata create-mapping [OPTIONS] RELATIONSHIP
Options:
--from TEXT Source (parent) attribute logical name.
--to TEXT Target (child) attribute logical name.
--auto Bulk-generate likely mappings via AutoMapEntity
(replaces any existing maps for the pair).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata create-one-to-many
Create a 1:N relationship and its lookup attribute atomically.
Usage:
crm metadata create-one-to-many [OPTIONS]
Options:
--schema-name TEXT Relationship schema name with publisher
prefix. [required]
--referenced-entity TEXT "1" side logical name (e.g. account).
[required]
--referencing-entity TEXT "N" side logical name (e.g. new_project).
[required]
--lookup-schema TEXT Lookup attribute schema name on referencing
entity. [required]
--lookup-display TEXT UI label for the lookup attribute.
[required]
--lookup-required [None|Recommended|ApplicationRequired]
--lookup-description TEXT
--cascade-assign [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-delete [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-reparent [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-share [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-unshare [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-merge [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--menu-label TEXT
--menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
--menu-order INTEGER
--hierarchical Mark the 1:N as hierarchical
(IsHierarchical). Use with a self-
referencing relationship (referenced ==
referencing entity) to enable the
parent/child hierarchy and Above/Under
operators.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--if-exists [error|skip] If the relationship already exists: error
(default) or skip (no-op success).
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata create-optionset
Create a global option set.
Usage:
crm metadata create-optionset [OPTIONS]
Options:
--name TEXT Fully prefixed option set name, e.g.
'new_priority'. Defaults to
<publisher_prefix>_<display> from the profile.
--display TEXT [required]
--description TEXT
--option TEXT Option as 'value:label' or ':label' (auto value).
Repeatable.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--if-exists [error|skip] If the option set already exists: error (default)
or skip (no-op success).
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata delete-attribute
Delete a custom attribute (column) from an entity.
Usage:
crm metadata delete-attribute [OPTIONS] ENTITY ATTRIBUTE
Options:
--yes Skip interactive confirmation.
--solution TEXT Optional. Forwarded as MSCRM.SolutionUniqueName; a
hard delete removes the component globally, so this
does not scope the delete.
--check-dependencies Preview blocking dependencies
(RetrieveDependenciesForDelete) in the result; pairs
with --dry-run.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata delete-entity
Permanently delete a custom entity (table) and ALL its rows.
Usage:
crm metadata delete-entity [OPTIONS] LOGICAL_NAME
Options:
--yes Skip interactive confirmation.
--solution TEXT Optional. Forwarded as MSCRM.SolutionUniqueName; a
hard delete removes the component globally, so this
does not scope the delete.
--check-dependencies Preview blocking dependencies
(RetrieveDependenciesForDelete) in the result; pairs
with --dry-run.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata delete-key
Delete an alternate key from an entity.
Usage:
crm metadata delete-key [OPTIONS] ENTITY KEY
Options:
--yes Skip interactive confirmation.
--solution TEXT Optional. Forwarded as MSCRM.SolutionUniqueName; a
hard delete removes the component globally, so this
does not scope the delete.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata delete-optionset
Delete a custom global option set.
Usage:
crm metadata delete-optionset [OPTIONS] NAME
Options:
--yes Skip interactive confirmation.
--solution TEXT Optional. Forwarded as MSCRM.SolutionUniqueName; a
hard delete removes the component globally, so this
does not scope the delete.
--check-dependencies Preview blocking dependencies
(RetrieveDependenciesForDelete) in the result; pairs
with --dry-run.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata delete-relationship
Delete a custom relationship (1:N or N:N) by schema name.
Usage:
crm metadata delete-relationship [OPTIONS] SCHEMA_NAME
Options:
--yes Skip interactive confirmation.
--solution TEXT Optional. Forwarded as MSCRM.SolutionUniqueName; a
hard delete removes the component globally, so this
does not scope the delete.
--check-dependencies Preview blocking dependencies
(RetrieveDependenciesForDelete) in the result; pairs
with --dry-run.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata dependencies
Show solution-component dependencies for a metadata target.
Read-only. --for delete returns components that block deletion (can_delete + blockers[]); --for dependents returns components that depend on the target; --for required returns the components the target itself depends on.
Usage:
crm metadata dependencies [OPTIONS] TARGET
Options:
--kind [entity|attribute|optionset|relationship]
Component kind of <target>. attribute uses
dotted 'entity.attribute'. [default:
entity]
--for [delete|dependents|required]
delete = blockers preventing delete
(RetrieveDependenciesForDelete); dependents
= components that depend on it
(RetrieveDependentComponents); required =
components it depends on
(RetrieveRequiredComponents). [default:
delete]
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata describe
One-shot write-readiness brief for an entity.
Consolidates everything an agent needs to construct a valid create/update
payload in one read-only call: the entity set name, primary id/name, and each
writable attribute with its required level. Lookups carry bind_key
(<Nav>@odata.bind) plus targets[] (logical + set_name); picklist / state /
status attributes carry inline {value, label} options, and a picklist bound
to a global option set also carries its global_optionset_id GUID. Read-only.
Usage:
crm metadata describe [OPTIONS] LOGICAL_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata entities
List entity definitions.
Usage:
crm metadata entities [OPTIONS]
Options:
--custom-only
--managed-only
--filter TEXT
--top INTEGER
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata entity
Show full entity definition.
Usage:
crm metadata entity [OPTIONS] LOGICAL_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata export-spec
Export a live entity as a desired-state spec for crm apply -f.
Reads the entity's metadata over the Web API (pure GETs) and emits a spec.
Pass --solution to bake in the top-level solution: block that crm apply
requires; without it the document is valid but not directly appliable (apply
exits 2 until a solution: block is added). Pass --with-forms to project the
entity's seedable main form (custom fields and their placement, script
libraries, event handlers); a form that cannot round-trip a real apply is
reported in the skipped bucket (ADR 0019) — meta.skipped under the JSON
envelope, data.skipped in the -o summary. Without -o, the spec is emitted
under the standard JSON envelope (pipeable); with -o, the bare YAML spec is
written to FILE.
Usage:
crm metadata export-spec [OPTIONS] LOGICAL_NAME
Options:
--with-views Include the entity's public views in the spec.
--with-relationships Include the entity's custom 1:N relationships in the
spec.
--with-forms Include the entity's seedable main form (custom
fields, libraries, handlers) as a forms: block.
--solution TEXT Bake a top-level solution: block (unique_name) into
the spec so it applies directly (crm apply requires
one). Omit to emit a valid but non-appliable
document.
-o, --output FILE Write the bare spec as YAML to FILE (appliable with
crm apply -f when --solution is given).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata get-optionset
Retrieve a global option set, including its options.
Usage:
crm metadata get-optionset [OPTIONS] NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata keys
List alternate keys defined on an entity.
Usage:
crm metadata keys [OPTIONS] LOGICAL_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata list-actions
List OData actions advertised by the service ($metadata).
Usage:
crm metadata list-actions [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata list-functions
List OData functions advertised by the service ($metadata).
Usage:
crm metadata list-functions [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata list-optionsets
List global option set definitions.
Usage:
crm metadata list-optionsets [OPTIONS]
Options:
--custom-only
--top INTEGER
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata picklist
Retrieve option set values for a picklist / state / status attribute.
Usage:
crm metadata picklist [OPTIONS] LOGICAL_NAME ATTRIBUTE
Options:
--no-global Skip GlobalOptionSet expansion.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata relationships
Show one-to-many, many-to-one, and many-to-many relationships.
Usage:
crm metadata relationships [OPTIONS] LOGICAL_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata state-relabel
Relabel a statecode state option (UpdateStateValue).
Usage:
crm metadata state-relabel [OPTIONS] ENTITY
Options:
--value INTEGER statecode value to relabel (e.g. 1 =
Inactive). [required]
--label TEXT New state label. [required]
--description TEXT
--merge-labels / --no-merge-labels
Preserve labels in untouched languages
(MergeLabels).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata status-add
Add a statuscode option tied to a state (InsertStatusValue).
Usage:
crm metadata status-add [OPTIONS] ENTITY
Options:
--state INTEGER statecode value the new status belongs to (e.g. 0
= Active). [required]
--label TEXT Status option label. [required]
--value INTEGER Explicit statuscode value. Omit to let the server
assign one.
--description TEXT
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata update-attribute
Update an attribute (column) definition (retrieve-merge-write).
Option-set option edits are NOT handled here — use update-optionset.
Usage:
crm metadata update-attribute [OPTIONS] ENTITY ATTRIBUTE
Options:
--display TEXT New UI label.
--description TEXT
--required [None|Recommended|ApplicationRequired]
--max-length INTEGER String/memo: max characters.
--precision INTEGER Decimal/double/money: precision (decimals).
--min FLOAT Numeric: minimum value.
--max FLOAT Numeric: maximum value.
--format TEXT String: Text|Email|Url|Phone|TextArea.
Datetime: DateOnly|DateAndTime.
--behavior [UserLocal|DateOnly|TimeZoneIndependent]
Datetime: change DateTimeBehavior. Only a
UserLocal column may change, once, to
DateOnly or TimeZoneIndependent (both
terminal). DateOnly auto-sets --format
DateOnly. Existing stored values are not
migrated (no Web API backfill).
--audit / --no-audit Enable/disable auditing (IsAuditEnabled).
Requires org-level auditing to be turned on
for audit records to be written; omit to
leave unchanged.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata update-entity
Update an entity (table) definition (retrieve-merge-write).
Usage:
crm metadata update-entity [OPTIONS] LOGICAL_NAME
Options:
--display TEXT New singular UI label.
--display-collection TEXT New plural UI label.
--description TEXT New entity description.
--ownership [UserOwned|OrganizationOwned]
Note: Dataverse rejects ownership changes
post-create.
--has-activities / --no-has-activities
Enable/disable activities.
--has-notes / --no-has-notes Enable/disable notes.
--audit / --no-audit Enable/disable auditing (IsAuditEnabled).
Requires org-level auditing to be turned on
for audit records to be written; omit to
leave unchanged.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm metadata update-optionset
Granular update: insert/update/delete/reorder options.
Usage:
crm metadata update-optionset [OPTIONS] NAME
Options:
--insert-option TEXT Insert option 'value:label' or ':label'.
Repeatable.
--update-option TEXT Update an existing option's label, 'value:label'.
Repeatable.
--delete-option INTEGER Delete option by value. Repeatable.
--reorder INT-LIST Comma-separated full ordered list of values, e.g.
'1,2,7,4'.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm metadata update-relationship
Update a relationship definition (retrieve-merge-write).
Usage:
crm metadata update-relationship [OPTIONS] SCHEMA_NAME
Options:
--cascade-assign [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-delete [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-reparent [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-share [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-unshare [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--cascade-merge [NoCascade|Cascade|Active|UserOwned|RemoveLink|Restrict]
--menu-behavior [UseLabel|UseCollectionName|DoNotDisplay]
--menu-label TEXT
--menu-order INTEGER
--hierarchical / --no-hierarchical
Set IsHierarchical on a 1:N relationship
(rejected for N:N).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm org
Org-level orientation (inventory, recon).
Usage:
crm org [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm org brief
One-call read-only org inventory: counts and key names, never full rows.
Consolidates what six fat list verbs (solution list, metadata entities,
webresource list, plugin list, workflow list, app list) would return
into one summarized brief, so an agent can orient without spending its context
budget. Sections: identity, solutions, publishers, schema, apps, automation,
components. Read-only — safe to run first.
Usage:
crm org brief [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm plugin
Register and manage plug-in assemblies, processing steps, and step images.
Usage:
crm plugin [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm plugin list-types
List registered plug-in types (optionally for one assembly).
Usage:
crm plugin list-types [OPTIONS]
Options:
--assembly TEXT Filter to plug-in types of this assembly (by name).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm plugin register-assembly
Register a plug-in assembly from a .dll file (uploads its bytes).
Usage:
crm plugin register-assembly [OPTIONS] PATH
Options:
--name TEXT Assembly name; defaults to the file name
stem.
--version TEXT Assembly version; defaults to 1.0.0.0.
--culture TEXT Culture code; defaults to 'neutral'.
--public-key-token TEXT Public key token; defaults to 'null'
(unsigned).
--isolation-mode [sandbox|none]
Isolation mode (sandbox=2, none=1). Default:
sandbox.
--description TEXT Assembly description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--update PATCH the content of an existing assembly
(resolved by name).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm plugin register-image
Register a step entity image (sdkmessageprocessingstepimage).
Usage:
crm plugin register-image [OPTIONS]
Options:
--step TEXT Step GUID or exact step name
(sdkmessageprocessingstep). [required]
--type [pre|post|both] Image type (pre=0, post=1, both=2). Post-
images require a PostOperation-stage step.
[required]
--alias TEXT Entity alias — the key used to access the
image from PreEntityImages/PostEntityImages in
plug-in code. [required]
--attributes TEXT Comma-separated columns to include in the
image. Omit for all columns (hurts
performance; pass a list).
--name TEXT Image name; defaults to the alias.
--message-property-name TEXT Override the derived request property
(required for Send-message steps: FaxId,
EmailId or TemplateId).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default
for a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm plugin register-step
Register a plug-in step (sdkmessageprocessingstep).
The step's event handler is a plug-in type (--plugin-type) or a service endpoint such as a webhook (--service-endpoint) — pass exactly one.
Usage:
crm plugin register-step [OPTIONS]
Options:
--message TEXT SDK message name (e.g. Create, Update,
Delete). [required]
--plugin-type TEXT Plug-in type name (the fully qualified
typename). Provide this or --service-
endpoint (exactly one event handler).
--service-endpoint TEXT Bind the step to a service endpoint (e.g. a
webhook from register-webhook) by name
instead of a plug-in type. Provide this or
--plugin-type (exactly one event handler).
--entity TEXT Primary entity logical name
(primaryobjecttypecode). Omit for a message-
level step (all entities).
--stage [prevalidation|preoperation|postoperation]
Pipeline stage (prevalidation=10,
preoperation=20, postoperation=40). Default:
postoperation.
--mode [sync|async] Execution mode (sync=0, async=1). Default:
sync. async requires --stage postoperation.
--rank INTEGER Execution order within the stage. Default:
1.
--filtering-attributes TEXT Comma-separated attributes that trigger the
step (Update).
--name TEXT Step name; defaults to a derived label. Pass
explicitly if the derived name would exceed
the platform's 256-char limit.
--configuration TEXT Unsecure configuration string.
--secure-configuration TEXT Secure configuration string, stored as a
separate related record linked from the
step. Write-only: the platform never returns
it and it is omitted from normal command
output. A --dry-run preview echoes the
request body, so it includes this value —
treat dry-run output as sensitive.
--async-auto-delete Auto-delete the system job on success (async
steps only).
--assembly TEXT Scope the plug-in type lookup to this
assembly (by name).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm plugin register-type
Register a plug-in type (plugintypes) under an existing assembly.
A content-only register-assembly does not create plugintype rows, so name each type here before register-step --plugin-type can resolve it.
Usage:
crm plugin register-type [OPTIONS]
Options:
--assembly TEXT Existing assembly NAME the plug-in type belongs to.
[required]
--type TEXT Fully qualified plug-in type name (e.g.
Contoso.Plugins.PreCreateAccount). [required]
--friendly-name TEXT Display name (friendlyname); defaults to the type
name.
--name TEXT Designer label (plugintype name); defaults to the
type name. Workflow activities use this as the
classic-designer Add-Step label — a null name shows
an empty, unusable label.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm plugin register-webhook
Register a webhook service endpoint (serviceendpoint, contract=8).
Usage:
crm plugin register-webhook [OPTIONS]
Options:
--name TEXT Unique webhook name (serviceendpoint.name).
[required]
--url TEXT Endpoint URL the platform POSTs the
execution context to (http on port 80 or
https on port 443). [required]
--auth [webhookkey|httpheader|httpquerystring]
Authentication scheme the endpoint expects
(authtype: webhookkey=4, httpheader=5,
httpquerystring=6). [required]
--auth-value TEXT Authentication value the endpoint expects
(the ?code= key for webhookkey, or the
header/query-string key-value pairs). Write-
only; the platform never returns it.
[required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm plugin set-step-state
Enable or disable a plug-in step (sdkmessageprocessingstep).
Usage:
crm plugin set-step-state [OPTIONS] STEP
Options:
--enable Enable the step. [required]
--disable Disable the step. [required]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm plugin unregister-assembly
Unregister a plug-in assembly (NAME or GUID), deleting dependent steps first.
Usage:
crm plugin unregister-assembly [OPTIONS] ASSEMBLY
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm plugin unregister-image
Unregister a step entity image (sdkmessageprocessingstepimage, NAME or GUID).
Usage:
crm plugin unregister-image [OPTIONS] IMAGE
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm plugin unregister-step
Unregister a plug-in step (sdkmessageprocessingstep, NAME or GUID).
Usage:
crm plugin unregister-step [OPTIONS] STEP
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm profile
Create, switch, and manage connection profiles.
Usage:
crm profile [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm profile add
Create a profile, save its secret, test the connection, and activate it.
Run with no flags for an interactive wizard; pass flags for scripting/CI.
Usage:
crm profile add [OPTIONS]
Options:
--url TEXT Server URL, e.g.
https://crm.contoso.local/org or
https://org.crm.dynamics.com
--name TEXT Profile name (default: URL host label).
--auth-scheme [ntlm|kerberos|negotiate|oauth]
Override the auth scheme inferred from the
URL.
--username TEXT NTLM: username.
--domain TEXT NTLM: AD domain (blank for UPN).
--tenant-id TEXT OAuth: Azure AD tenant id.
--client-id TEXT OAuth: application (client) id.
--password TEXT NTLM password (or OAuth client secret).
Prompted if omitted on a TTY.
--client-secret TEXT OAuth client secret — alias for --password
(mutually exclusive).
--api-version TEXT Web API version. Omit to auto-negotiate
(v9.2 → v9.1 on on-prem).
--no-verify-ssl Skip SSL certificate verification.
--publisher-prefix TEXT Default schema-name prefix, e.g. 'new'.
--store-password-plaintext Force plaintext storage (skip the OS
keyring).
--read-only Mark the profile read-only: the backend
refuses org mutations. Clearing it later
requires an interactive terminal.
-y, --yes Skip the overwrite-confirm prompt.
--save-on-test-failure Save the profile even if the live connection
test fails, as long as it is structurally
valid (for CI / no-TTY runs; a malformed URL
still errors). Distinct from --yes.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm profile delete-password
Remove a stored secret (OS keyring AND plaintext).
Usage:
crm profile delete-password [OPTIONS]
Options:
--profile TEXT Profile whose secret to remove. [required]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm profile edit
Change a profile's fields (not its secret — use set-password).
No NAME argument shows a picker.
Usage:
crm profile edit [OPTIONS] [NAME]
Options:
--url TEXT
--username TEXT
--domain TEXT
--tenant-id TEXT
--client-id TEXT
--api-version TEXT
--publisher-prefix TEXT
--verify-ssl / --no-verify-ssl Enable or skip SSL certificate verification
(parity with `profile add`'s --no-verify-
ssl).
--read-only / --no-read-only Set or clear the read-only guardrail.
Clearing (--no-read-only) requires an
interactive terminal to confirm.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm profile list
List saved profiles; the active one is marked.
Usage:
crm profile list [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm profile rename
Rename profile OLD to NEW, cascading its secret, active pointer, and cache.
No OLD shows a picker; a missing NEW is prompted for. All validation runs
before any mutation; a keyring failure warns (with a profile set-password
NEW recovery hint) rather than rolling back.
Usage:
crm profile rename [OPTIONS] [OLD] [NEW]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm profile rm
Delete a profile and its stored secret. No argument shows a picker.
Usage:
crm profile rm [OPTIONS] [NAME]
Options:
-y, --yes Skip confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm profile set-password
Store/replace the secret for an existing profile.
Usage:
crm profile set-password [OPTIONS]
Options:
--profile TEXT Profile to store the secret for. [required]
--password TEXT Secret to store (else prompted on a TTY).
--client-secret TEXT OAuth client secret — alias for --password
(mutually exclusive).
--store-password-plaintext Force plaintext storage.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm profile use
Switch the active profile. No argument shows an interactive picker.
Usage:
crm profile use [OPTIONS] [NAME]
Options:
--none Clear the active profile.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm query
Run OData and FetchXML queries.
Usage:
crm query [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm query count
Count rows for an entity via RetrieveTotalRecordCount (cached server-side).
ENTITY may be the entity-set name ("accounts") or the logical name ("account"), in any case — it is resolved to the logical name that RetrieveTotalRecordCount requires, so it matches the entity-set form used everywhere else in the CLI.
Usage:
crm query count [OPTIONS] ENTITY
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm query fetchxml
Run a FetchXML query.
ENTITY_SET is the OData entity-set name (e.g. "accounts"). When omitted,
the logical entity name is parsed from the
Examples:
crm --json query fetchxml --xml '
Usage:
crm query fetchxml [OPTIONS] [ENTITY_SET]
Options:
--xml TEXT Inline FetchXML string.
--file FILE Path to a FetchXML file.
--annotations / --no-annotations
Include formatted values.
--minimal JSON mode: drop every record key containing
'@' (OData annotations like @odata.etag,
*@FormattedValue, *@lookuplogicalname);
keeps business fields, _*_value lookup
GUIDs, and the primary id.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm query odata
OData v4 GET — entity set, bound-function path, or metadata path.
Accepted forms:
contacts bare entity set
RetrieveAppComponents(AppModuleId=
OData query options go through --select/--filter/etc., never inline. A '?' or '$' in the positional arg is rejected client-side before the request.
Usage:
crm query odata [OPTIONS] ENTITY_SET|BOUND_FUNC|METADATA_PATH
Options:
--select TEXT
--filter TEXT OData $filter expression.
--top INTEGER
--order-by TEXT OData $orderby expression.
--expand TEXT
--apply EXPR OData $apply aggregation expression, e.g.
'groupby((field),aggregate(measure with sum
as total))'. The result shape is whatever
the aggregation returns.
--count Also request $count.
--page-size INTEGER
--all Follow @odata.nextLink across all pages and
merge the results into one array (default: a
single server page).
--max-records INTEGER Cap the total rows returned, following
@odata.nextLink only as far as needed.
Implies page-following; bounds --all when
both given.
--annotations / --no-annotations
Include formatted values.
--track-changes Request a change-tracking delta link
(Prefer: odata.track-changes): returns the
current rows plus
meta.delta_token/meta.delta_link to resume
from later. Rejects --filter/--order-
by/--expand/--top/--all.
--delta-token TEXT Resume change tracking from a prior
meta.delta_token: returns only rows
created/updated/deleted since (deletes carry
reason="deleted").
--minimal JSON mode: drop every record key containing
'@' (OData annotations like @odata.etag,
*@FormattedValue, *@lookuplogicalname);
keeps business fields, _*_value lookup
GUIDs, and the primary id.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm query saved
Execute a system view (savedquery) by GUID. Use --json query odata savedqueries to
discover IDs.
Usage:
crm query saved [OPTIONS] ENTITY_SET SAVEDQUERY_ID
Options:
--annotations / --no-annotations
Include formatted values.
--page-size INTEGER
--minimal JSON mode: drop every record key containing
'@' (OData annotations like @odata.etag,
*@FormattedValue, *@lookuplogicalname);
keeps business fields, _*_value lookup
GUIDs, and the primary id.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm query user
Execute a saved view (userquery) by GUID.
Usage:
crm query user [OPTIONS] ENTITY_SET USERQUERY_ID
Options:
--annotations / --no-annotations
Include formatted values.
--page-size INTEGER
--minimal JSON mode: drop every record key containing
'@' (OData annotations like @odata.etag,
*@FormattedValue, *@lookuplogicalname);
keeps business fields, _*_value lookup
GUIDs, and the primary id.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm repl
Interactive REPL (default when no subcommand is provided).
Usage:
crm repl [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm report
Register and manage custom reports (SSRS RDL or link) headlessly.
create --body-file uploads an RDL; create --url registers a link report.
create --org makes a report organization-wide (otherwise it is personal).
set-category files a report under sales/service/marketing/administrative.
Usage:
crm report [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm report create
Create a report from an RDL file (--body-file) or a link (--url).
Usage:
crm report create [OPTIONS]
Options:
--name TEXT Report display name. [required]
--body-file FILE Path to an SSRS RDL file to upload (Reporting
Services report). Mutually exclusive with --url.
--url TEXT External report URL (link report). Mutually exclusive
with --body-file.
--filename TEXT Report file name. Defaults to the --body-file
basename.
--description TEXT Report description.
--org Make the report available to the organization
(ispersonal=false). Default: personal.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm report delete
Delete a report by REPORT_ID.
Usage:
crm report delete [OPTIONS] REPORT_ID
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm report get
Get a single report by REPORT_ID (its RDL body / link URL included).
Usage:
crm report get [OPTIONS] REPORT_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm report list
List all reports (summary columns only — use report get for the body).
Usage:
crm report list [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm report set-category
File REPORT_ID under a report area (creates a reportcategory record).
Usage:
crm report set-category [OPTIONS] REPORT_ID
Options:
--category [administrative|marketing|sales|service]
Report area: sales, service, marketing, or
administrative. [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm ribbon
Read and edit entity command-bar (ribbon) buttons.
Usage:
crm ribbon [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm ribbon add-button
Add a JavaScript command-bar button to an entity (no manual XML editing).
Optionally set the button's icon at creation: --modern-image (SVG web resource,
Unified Interface) and/or --image16 / --image32 (raster web resources, classic
UI). Each is written as a $webresource: reference (which adds a solution
dependency on the icon) and validated for existence + type before the import.
With --diff-file the edit is applied offline to a local RibbonDiffXml file (no
backend calls); the icon web-resource existence check is skipped and deferred to
ribbon apply's import-time validation.
Usage:
crm ribbon add-button [OPTIONS] ENTITY
Options:
--label TEXT Button label text. [required]
--location [form|homegrid|subgrid]
Where the button appears. [required]
--group TEXT Override the target ribbon group id.
--webresource TEXT JS web resource name, e.g.
'cwx_/scripts/x.js'. [required]
--function TEXT JavaScript function name, e.g. 'ns.fn'.
[required]
--param [PrimaryControl|SelectedControlSelectedItemIds]
CrmParameter passed to the function.
[required]
--sequence INTEGER [default: 50]
--id TEXT Override the generated id base
({entity}.{location}.{label}).
--modern-image TEXT Web resource (SVG) for the Unified Interface
ModernImage icon.
--image16 TEXT Web resource (16×16 raster: PNG/JPG/GIF/ICO)
for the classic Image16by16 icon.
--image32 TEXT Web resource (32×32 raster: PNG/JPG/GIF/ICO)
for the classic Image32by32 icon.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--diff-file FILE Offline: apply this edit to a local
RibbonDiffXml file (from `ribbon export
--solution`), no backend calls. Compose N
edits, then `ribbon apply`. Mutually
exclusive with --solution/--publish.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm ribbon add-custom-rule
Add a custom (JavaScript) enable rule to a command and reference it.
Defines an EnableRule whose CustomRule calls the given web-resource function,
then references it on the command. The web resource must already exist. The
CommandDefinition Id is never touched. With --diff-file the edit is applied
offline to a local RibbonDiffXml file (no backend calls); the web-resource
existence check is skipped and deferred to ribbon apply's import.
Usage:
crm ribbon add-custom-rule [OPTIONS] ENTITY
Options:
--command-id TEXT The CommandDefinition Id to attach the rule to.
[required]
--webresource TEXT JS web resource holding the rule function, e.g.
'cwx_/scripts/x.js'. [required]
--function TEXT JavaScript function returning bool/Promise, e.g.
'ns.canRun'. [required]
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--diff-file FILE Offline: apply this edit to a local RibbonDiffXml
file (from `ribbon export --solution`), no backend
calls. Compose N edits, then `ribbon apply`.
Mutually exclusive with --solution/--publish.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm ribbon apply
Import a local RibbonDiffXml working-copy file, full-replacing ENTITY's ribbon.
The terminal step of the offline flow: ribbon export ENTITY --solution S
--output f.xml, compose N --diff-file edits against f.xml, then ribbon apply
ENTITY --solution S --from f.xml — one export → import → publish. ENTITY's
Usage:
crm ribbon apply [OPTIONS] ENTITY
Options:
--from FILE The local RibbonDiffXml working-copy file to
import (from `ribbon export --solution`, edited
with `--diff-file`). [required]
--publish / --no-publish Run PublishAllXml after the import. Default:
publish (the working-copy flow's single terminal
publish); pass --no-publish to stage the import
without publishing. [default: publish]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm ribbon export
Export a ribbon as readable XML.
Pass ENTITY for one table's composed ribbon, or --application for the app-wide
ribbon (the commands not bound to a specific table). With --solution, export
ENTITY's editable RibbonDiffXml fragment from that solution — the working-copy
the offline --diff-file verbs edit and ribbon apply imports. Read-only.
Usage:
crm ribbon export [OPTIONS] [ENTITY]
Options:
-a, --application Export the application-wide ribbon
(RetrieveApplicationRibbon) instead of a single
entity's. Omit ENTITY when set.
--solution TEXT Export ENTITY's editable RibbonDiffXml fragment from
this solution (the importable working-copy the
`--diff-file` verbs edit and `ribbon apply` imports),
instead of the composed read-only ribbon. Requires
ENTITY.
-o, --output FILE Write the ribbon XML to this file instead of stdout.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm ribbon hide-button
Hide an out-of-box command-bar button (reversibly by default).
Validates --target-id against the live composed ribbon so a typo errors instead
of silently doing nothing. Never touches the button's classid/Command/
TemplateAlias. display-rule overrides the button's command with two
always-false platform DisplayRules; hide-action writes a HideCustomAction,
which is irreversible without a new solution version and is gated behind --yes.
Usage:
crm ribbon hide-button [OPTIONS] ENTITY
Options:
--target-id TEXT The OOB button (control) Id to hide, as it
appears in `crm ribbon export ENTITY`.
[required]
--method [display-rule|hide-action]
display-rule: reversible (override the
command with two always-false DisplayRules).
hide-action: HideCustomAction, a one-way
trapdoor removable only by a new solution
version. [default: display-rule]
--yes Skip interactive confirmation.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm ribbon list
List the custom buttons declared in a solution's RibbonDiffXml.
Usage:
crm ribbon list [OPTIONS] ENTITY
Options:
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for a
deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm ribbon remove
Remove a custom button (CustomAction + its CommandDefinition).
With --diff-file the button is removed from a local RibbonDiffXml file offline
(no backend calls); ribbon apply then imports the result.
Usage:
crm ribbon remove [OPTIONS] ENTITY
Options:
--button-id TEXT The CustomAction Id to remove (see `crm ribbon
list`). [required]
--yes Skip interactive confirmation.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--diff-file FILE Offline: apply this edit to a local RibbonDiffXml
file (from `ribbon export --solution`), no backend
calls. Compose N edits, then `ribbon apply`.
Mutually exclusive with --solution/--publish.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm ribbon set-icon
Set a custom command-bar button's icon on an existing button.
Writes only the icon attributes — ModernImage (--modern-image, an SVG web resource for the Unified Interface) and/or Image16by16 / Image32by32 (--image16 / --image32, raster web resources for the classic UI). The button's Command, LabelText, TemplateAlias, Sequence and Id are protected. Pass at least one icon flag. Each reference is validated (exists + slot type) before the solution round-trip, and written as a $webresource: directive so the solution gains a dependency on the icon web resource.
Usage:
crm ribbon set-icon [OPTIONS] ENTITY
Options:
--button-id TEXT The custom button's CustomAction Id (see `crm
ribbon list`). [required]
--modern-image TEXT Web resource (SVG) for the Unified Interface
ModernImage icon.
--image16 TEXT Web resource (16×16 raster: PNG/JPG/GIF/ICO) for
the classic Image16by16 icon.
--image32 TEXT Web resource (32×32 raster: PNG/JPG/GIF/ICO) for
the classic Image32by32 icon.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm ribbon set-label
Set a custom command-bar button's label and tooltips.
Touches only LabelText / ToolTipTitle / ToolTipDescription — the button's
Command, TemplateAlias, Sequence and Id are protected. Pass at least one of
--label / --tooltip-title / --tooltip-description. With --lcid the text is
localized through a CASE-SENSITIVE $LocLabels:<id> directive (the text lands
in a
ribbon apply's import).
Usage:
crm ribbon set-label [OPTIONS] ENTITY
Options:
--button-id TEXT The custom button's CustomAction Id (see `crm
ribbon list`). [required]
--label TEXT New button LabelText.
--tooltip-title TEXT New button ToolTipTitle.
--tooltip-description TEXT New button ToolTipDescription.
--lcid INTEGER Localize the text for this language (LCID) via a
$LocLabels directive instead of setting it
inline. Validated against the org's provisioned
languages.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-all`
when your set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default
for a deliberate Default-Solution-only write.
--diff-file FILE Offline: apply this edit to a local
RibbonDiffXml file (from `ribbon export
--solution`), no backend calls. Compose N edits,
then `ribbon apply`. Mutually exclusive with
--solution/--publish.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm ribbon set-rules
Set the enable/display rule references on a command's CommandDefinition.
Each rule id is a platform rule (validated against a curated Mscrm.*
allow-list) or a custom rule (e.g. one added with ribbon add-custom-rule).
The CommandDefinition Id is never touched. With --diff-file the edit is applied
offline to a local RibbonDiffXml file (no backend calls).
Usage:
crm ribbon set-rules [OPTIONS] ENTITY
Options:
--command-id TEXT The CommandDefinition Id whose rules to set (see
`crm ribbon list`). [required]
--enable-rule RULE_ID Enable-rule id to reference (repeatable). Replaces
the command's enable rules with exactly these, in
order.
--display-rule RULE_ID Display-rule id to reference (repeatable).
Replaces the command's display rules with exactly
these, in order.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--diff-file FILE Offline: apply this edit to a local RibbonDiffXml
file (from `ribbon export --solution`), no backend
calls. Compose N edits, then `ribbon apply`.
Mutually exclusive with --solution/--publish.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm scaffold
Generate D365 metadata from shorthand specs.
Usage:
crm scaffold [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm scaffold table
Create an entity (table) with N columns in a single publish.
Builds a one-entity in-memory apply spec from the given display name and
column shorthands, then runs it through crm.core.apply.apply_spec. Each
resource is created with if_exists=skip in dependency order, so re-running
the same command is a no-op. One PublishAllXml fires at the end (or is
suppressed by --stage-only).
Global --dry-run: reports the entity + all columns as planned without making any create calls (only the entity existence GET fires to probe the current state).
Global --stage-only: creates everything but skips the final publish; the result envelope carries meta.staged=true.
Emits {ok, data:{applied, skipped, planned, failed}, meta:{staged}}.
Usage:
crm scaffold table [OPTIONS] DISPLAY
Options:
--column DISPLAY:KIND[:opts] Column shorthand:
DISPLAY:KIND[:key=value,...]. KIND is one of
string, memo, integer, bigint, decimal,
double, money, boolean, datetime, picklist,
multiselect, lookup, image, file.
string/memo default max_length to 100/2000;
override with max_length=N. lookup requires
target_entity=<logical_name>.
picklist/multiselect require
optionset_name=<name>. Optional: required=No
ne|Recommended|ApplicationRequired,
description=<text> (opts are comma-
separated, so description cannot contain a
comma). Repeatable — pass one --column per
column. [required]
--schema-name TEXT Entity schema name override (PascalCase with
prefix, e.g. new_Project). Derived from
DISPLAY and publisher prefix when omitted.
--display-collection TEXT Plural UI label for the entity set. Derived
by apply when omitted.
--ownership [UserOwned|OrganizationOwned]
Entity ownership model. [default:
UserOwned]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm security
List and assign security roles, and share records (POA).
Usage:
crm security [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm security assign-role
Assign a security role to a user or team.
Exactly one of --to-user or --to-team must be provided. Role assignment is cumulative and not cleanly reversible.
Usage:
crm security assign-role [OPTIONS] ROLE_ID
Options:
--to-user GUID Assign the role to this system user GUID.
--to-team GUID Assign the role to this team GUID.
--yes Skip interactive confirmation.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security create-role
Create a security role (NAME is the role's display name).
The role starts with no privileges; grant them with
security set-role-privileges. Pass --solution to add the new role to an
unmanaged solution as a component (only a newly created role is added; with
--if-exists skip an existing role is reused, not added). Use --dry-run to
preview without writing.
Usage:
crm security create-role [OPTIONS] NAME
Options:
--business-unit GUID Business unit GUID for the role (defaults to the
caller's).
--if-exists [error|skip] On a same-name role in the same business unit:
error, or skip (reuse the existing role).
[default: error]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security grant
Share a record with a principal (POA GrantAccess).
ENTITY_SET is the entity-set name (e.g. accounts); RECORD_ID is the record
GUID. Sharing is reversible with security revoke.
Usage:
crm security grant [OPTIONS] ENTITY_SET RECORD_ID
Options:
--to TYPE:GUID Principal to share with, as <user|team|org>:<guid>.
[required]
--rights RIGHTS Comma-separated access rights: Read,Write,Append,Appe
ndTo,Create,Delete,Share,Assign. [required]
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security list-access
List the principals a record is shared with and their rights.
ENTITY_SET is the entity-set name (e.g. accounts); RECORD_ID is the GUID. Reports each principal's type, id, and effective shared access mask (RetrieveSharedPrincipalsAndAccess).
Usage:
crm security list-access [OPTIONS] ENTITY_SET RECORD_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security list-roles
List security roles (optionally filtered by business unit or name).
Usage:
crm security list-roles [OPTIONS]
Options:
--business-unit GUID Filter to roles belonging to this business unit GUID.
--name-contains TEXT Filter to roles whose name contains this text
(server-side).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security list-team-roles
List security roles assigned to a team (TEAM_ID is a GUID).
Usage:
crm security list-team-roles [OPTIONS] TEAM_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security list-user-roles
List security roles directly assigned to a system user (USER_ID is a GUID).
Shows only roles assigned directly to the user, not roles inherited
through team membership. Use security user-privileges to see the
full effective privilege set (direct + team-inherited).
Usage:
crm security list-user-roles [OPTIONS] USER_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security revoke
Remove a principal's shared access to a record (POA RevokeAccess).
Removes all of the principal's shared rights on the record (there is no per-right revoke). ENTITY_SET is the entity-set name; RECORD_ID is the GUID.
Usage:
crm security revoke [OPTIONS] ENTITY_SET RECORD_ID
Options:
--from TYPE:GUID Principal to unshare, as <user|team|org>:<guid>.
[required]
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security set-role-privileges
Add or replace a security role's privileges (ROLE is a role id or name).
Resolve privileges from access×entity selectors and/or explicit privilege names, clamp the requested --depth per privilege, then grant them. --replace wipes any privilege not in the resolved set. Use --dry-run to preview.
Usage:
crm security set-role-privileges [OPTIONS] ROLE
Options:
--access LIST Comma-separated access types: read,write,create,delet
e,append,appendto,assign,share. Requires --entities
or --all-entities.
--entities LIST Comma-separated entity logical names to scope
--access to.
--all-entities Apply --access across every entity (org-wide).
--privilege LIST Explicit privilege names (comma-separated), e.g.
prvCreateEntity. The escape hatch for non-entity
privileges.
--depth LEVEL Privilege depth: basic|local|deep|global (aliases
user|businessunit|parentchild|organization). Clamped
per privilege to the levels it supports. [required]
--add Merge privileges into the role (default, non-
destructive).
--replace Replace the role's privileges with exactly the
resolved set.
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm security user-privileges
Show a system user's effective privileges (USER_ID is a GUID).
Resolves the user's full privilege set — from their own roles plus team-inherited — via RetrieveUserPrivileges. Team-inherited privileges are reported at Basic depth only.
Usage:
crm security user-privileges [OPTIONS] USER_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm self-update
Update the crm CLI (method-aware) or report available updates.
Usage:
crm self-update [OPTIONS]
Options:
--check Report current vs latest version and exit without
modifying anything.
--yes Run the upgrade non-interactively (uv/pipx installs;
skips the confirm prompt).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm service-document
GET the root service document — lists every entity set the server exposes.
Usage:
crm service-document [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm session
Local session state.
Usage:
crm session [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm session audit
Show this session's LOCAL mutation journal (client-side).
This is the local, client-side record of mutating commands run in this session — it is NOT the Dataverse server-side audit log.
Usage:
crm session audit [OPTIONS]
Options:
--tail INTEGER RANGE Only the last N entries (N >= 1). [x>=1]
--session TEXT Read another session's journal (default: current
--session).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm session clear
Usage:
crm session clear [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm session history
Usage:
crm session history [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm session info
Usage:
crm session info [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap
Edit a live model-driven app SiteMap's navigation (areas/groups/subareas).
Usage:
crm sitemap [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm sitemap add-area
Add an Area to the sitemap SITEMAP_ID.
Usage:
crm sitemap add-area [OPTIONS] SITEMAP_ID
Options:
--id TEXT New Area Id ([a-zA-Z0-9_]+). [required]
--title TEXT Area display title. [required]
--icon TEXT Area icon (a path or '$webresource:<name>').
--show-groups Set ShowGroups='true' on the new Area.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap add-group
Add a Group under an Area in the sitemap SITEMAP_ID.
Usage:
crm sitemap add-group [OPTIONS] SITEMAP_ID
Options:
--area TEXT Parent Area Id. [required]
--id TEXT New Group Id ([a-zA-Z0-9_]+). [required]
--title TEXT Group display title. [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap add-subarea
Add a SubArea under a Group (exactly one of --entity/--url/--dashboard).
Usage:
crm sitemap add-subarea [OPTIONS] SITEMAP_ID
Options:
--area TEXT Parent Area Id. [required]
--group TEXT Parent Group Id. [required]
--id TEXT New SubArea Id ([a-zA-Z0-9_]+). [required]
--entity TEXT Bind a table by logical name (validated to exist).
--url TEXT Link to a URL (incl. an HTML web resource).
--dashboard TEXT Open a dashboard by GUID.
--title TEXT SubArea display title.
--icon TEXT SubArea icon (a path or '$webresource:<name>').
--pass-params With --url: append context params (userid,
orgname, orglcid, userlcid) to the URL (emits
PassParams="true").
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap move-node
Reorder a node within its parent in the sitemap SITEMAP_ID.
Usage:
crm sitemap move-node [OPTIONS] SITEMAP_ID
Options:
--id TEXT Id of the Area/Group/SubArea to reorder.
[required]
--before TEXT Move directly before this sibling Id (same parent
+ type).
--after TEXT Move directly after this sibling Id (same parent +
type).
--index INTEGER Move to this 0-based position among its same-type
siblings.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap remove-node
Remove (or comment out) a node from the sitemap SITEMAP_ID.
Usage:
crm sitemap remove-node [OPTIONS] SITEMAP_ID
Options:
--id TEXT Id of the Area/Group/SubArea to remove.
[required]
--comment-out Replace the node with an XML comment instead of
deleting it.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap set-description
Set localized description(s) on a node in the sitemap SITEMAP_ID.
Usage:
crm sitemap set-description [OPTIONS] SITEMAP_ID
Options:
--id TEXT Id of the Area/Group/SubArea to describe.
[required]
--lcid INTEGER 4-digit locale ID (repeatable; paired positionally
with --description; must be an installed
language). [required]
--description TEXT Localized description for the matching --lcid
(repeatable). [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sitemap set-title
Set localized title(s) on a node in the sitemap SITEMAP_ID.
Usage:
crm sitemap set-title [OPTIONS] SITEMAP_ID
Options:
--id TEXT Id of the Area/Group/SubArea to title. [required]
--lcid INTEGER 4-digit locale ID (repeatable; paired positionally
with --title; must be an installed language).
[required]
--title TEXT Localized title for the matching --lcid
(repeatable). [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm skill
Install the bundled agent skill (SKILL.md) for Copilot / Claude / Cursor.
Usage:
crm skill [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm skill install
Copy the bundled skill tree (SKILL.md + reference/) into the agent's skill directory.
Usage:
crm skill install [OPTIONS]
Options:
--target [claude|copilot|cursor]
Where to install the skill. Ignored if
--dest is given. [default: claude]
--dest DIRECTORY Custom destination directory (overrides
--target).
--force Overwrite an existing skill at the
destination.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm skill path
Show the path of the bundled skill directory inside the installed package.
Usage:
crm skill path [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm skill uninstall
Remove the installed skill (SKILL.md + reference/, and the directory if empty).
Usage:
crm skill uninstall [OPTIONS]
Options:
--target [claude|copilot|cursor]
[default: claude]
--dest DIRECTORY
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm sla
Create, configure, and activate D365 SLAs and their backing workflows.
Usage:
crm sla [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm sla activate
Activate an SLA: its backing workflows first, then the SLA record.
Backing workflows already active are skipped, so re-running is safe. If any backing workflow fails to activate (compile errors after a solution import), the SLA is left untouched and the per-workflow error report explains why UI activation is required.
Usage:
crm sla activate [OPTIONS] SLA_ID
Options:
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm sla add-kpi
Attach a KPI / SLA-item to an existing SLA before activation.
--applicable-when and --success-criteria each accept an inline FetchXML/
condition string or a *-file path.
Usage:
crm sla add-kpi [OPTIONS]
Options:
--sla TEXT Parent SLA id. [required]
--kpi TEXT KPI field the item tracks
(slaitem.relatedfield); also the default item
name. [required]
--name TEXT SLA-item name (defaults to --kpi).
--applicable-when TEXT FetchXML/condition for when the KPI applies
(slaitem.applicablewhenxml).
--applicable-when-file FILE Read --applicable-when from a file.
--success-criteria TEXT FetchXML/condition defining KPI success
(slaitem.successconditionsxml).
--success-criteria-file FILE Read --success-criteria from a file.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default
for a deliberate Default-Solution-only write.
--as-user GUID Impersonate systemuser by GUID via
MSCRMCallerID header. Mutually exclusive with
--as-user-object-id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm sla create
Create an SLA for a target entity and ensure that entity is SLA-enabled.
Defines the SLA record; attach KPI / SLA-item conditions with
sla add-kpi, then activate with sla activate. The sla entity has no
FetchXML condition of its own — per-KPI --applicable-when /
--success-criteria live on sla add-kpi.
Usage:
crm sla create [OPTIONS]
Options:
--name TEXT SLA name. [required]
--entity TEXT Target entity logical name (objecttypecode); also
the entity whose IsSLAEnabled flag is
verified/set. [required]
--applicable-from TEXT Date-anchor field the SLA calculates from, e.g.
'createdon' (sla.applicablefrom).
--business-hours GUID Business-hours calendar id (sla.businesshoursid).
--description TEXT SLA description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution
Solution lifecycle (create-publisher / create / list / info / components / export / import).
Usage:
crm solution [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm solution add-component
Add an existing component to an unmanaged solution (AddSolutionComponent).
Usage:
crm solution add-component [OPTIONS]
Options:
--solution TEXT Target unmanaged solution unique name. [required]
--type TEXT Component type: integer or friendly name (e.g. 61 or
webresource). [required]
--id GUID Component GUID (objectid) to add. [required]
--no-add-required Do not also add required components
(AddRequiredComponents: false).
--no-subcomponents Exclude subcomponents (DoNotIncludeSubcomponents:
true).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution apply-upgrade
Apply a previously-staged holding-solution upgrade (DeleteAndPromote).
Promotes a solution already staged via stage-and-upgrade (run without
--promote), replacing the base solution and deleting its patches. This is
the separate-promote path that decouples stage-time from promote-time;
stage-and-upgrade --promote remains the one-shot path.
Usage:
crm solution apply-upgrade [OPTIONS] UNIQUE_NAME
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution clone-as-patch
Create a solution patch from a parent solution (CloneAsPatch).
Usage:
crm solution clone-as-patch [OPTIONS]
Options:
--solution TEXT Parent solution unique name to clone a patch from.
[required]
--display TEXT Patch display name (defaults to the parent's friendly
name).
--version TEXT Patch version (4-part dotted). Must share the
parent's major.minor; defaults to the parent version
with the revision bumped.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution components
List solution components; with --save write a normalized inventory, with --diff compare live vs expected (non-zero exit on drift).
Usage:
crm solution components [OPTIONS] UNIQUE_NAME
Options:
--diff FILE Compare live components against this saved JSON
snapshot; exits non-zero on drift.
--save FILE Write a normalized component inventory to this path
as JSON.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution create
Create an unmanaged solution bound to a publisher (solutions).
Usage:
crm solution create [OPTIONS]
Options:
--name TEXT Solution unique name, e.g. 'CRMWorx'. [required]
--display TEXT Friendly name (defaults to --name).
--version TEXT Solution version (default 1.0.0.0).
--publisher TEXT Publisher unique name (mutually exclusive with
--publisher-id).
--publisher-id TEXT Publisher GUID (mutually exclusive with
--publisher).
--if-exists [error|skip]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution create-publisher
Create a solution publisher (publishers).
Usage:
crm solution create-publisher [OPTIONS]
Options:
--name TEXT Publisher unique name, e.g. 'crmworx'.
[required]
--display TEXT Friendly name (defaults to --name).
--prefix TEXT Customization prefix: 2-8 alphanumeric,
starts with a letter, not 'mscrm'. e.g.
'cwx'. [required]
--option-value-prefix INTEGER Option-value prefix (integer 10000-99999).
[required]
--if-exists [error|skip]
--set-default / --no-set-default
Write publisher_prefix back to the active
named profile (default on).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm solution dependencies
Show blockers that would prevent UNINSTALLING a managed solution.
Read-only. Calls RetrieveDependenciesForUninstall(SolutionUniqueName='
Usage:
crm solution dependencies [OPTIONS] UNIQUE_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution export
Export a solution to a zip.
With no UNIQUE_NAME on an interactive terminal, lists the org's solutions (unmanaged first) and prompts you to pick one. Under --json or with no TTY the name is required (a missing one is a usage error, exit 2).
Usage:
crm solution export [OPTIONS] [UNIQUE_NAME]
Options:
-o, --output FILE [required]
--managed
--export-setting [autonumbering|calendar|customizations|email-tracking|general|isv-config|marketing|outlook-sync|relationship-roles|sales]
Repeatable; include a named export setting
in the solution payload.
--timeout INTEGER Async operation timeout in seconds.
Overrides profile.async_timeout.
--no-retry Disable the 429/5xx retry loop for this
invocation.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm solution export-spec
Project a whole solution into one apply-consumable desired-state spec.
Walks the solution's members (pure GETs, read-only) and merges every entity
it touches — entity, attribute, global option set, view, 1:N relationship —
into a single spec via build_entity_spec per touched entity. A top-level
solution: key is emitted so a round-trip crm --dry-run apply -f <file>
against another org auto-scopes its drift/prune report (the source side of
the org-to-org drift recipe).
Apply-seedable members project in full: entities (+ their attributes, option
sets, views, 1:N relationships, seedable main form), security roles (name,
business unit, privileges by depth), web resources (inline base64 content,
display name, type), and model-driven apps (identity + Entity-backed sitemap,
under a top-level apps: block). Members that cannot round-trip a real apply
(plug-ins, additional main forms, an app's record-backed component bindings,
...) are reported in a skipped bucket or warnings; the verb never fails on
an unsupported component and never drops one silently.
With -o, the bare YAML spec is written to FILE (apply-ready). Without -o, a summary plus the skipped bucket is emitted under the JSON envelope.
Usage:
crm solution export-spec [OPTIONS] UNIQUE_NAME
Options:
-o, --output FILE Write the bare merged spec as YAML to FILE (directly
consumable by crm apply -f).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution extract
Extract a solution zip into a folder tree (offline; pac solution unpack).
OFFLINE local-file transform — no connection or profile required.
Usage:
crm solution extract [OPTIONS]
Options:
--zipfile FILE Exported solution zip to unpack. [required]
--folder DIRECTORY Destination folder for the source-
controllable tree. [required]
--package-type [unmanaged|managed|both]
pac --packagetype (default Unmanaged).
--pac-path FILE Path to the pac executable (else CRM_PAC
env, then PATH).
--timeout INTEGER pac subprocess timeout in seconds.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm solution import
Usage:
crm solution import [OPTIONS] ZIP_PATH
Options:
--publish / --no-publish Set the import's PublishWorkflows server
option (activate imported workflows). NOT
PublishAllXml. Default: publish.
--overwrite / --no-overwrite Set ImportSolution
OverwriteUnmanagedCustomizations. Default:
overwrite (clobbers unmanaged customizations
in the target org).
--skip-dependency-check Set ImportSolution
SkipProductUpdateDependencies to proceed past
a product-update dependency block.
--timeout INTEGER Async operation timeout in seconds. Overrides
profile.async_timeout.
--no-retry Disable the 429/5xx retry loop for this
invocation.
-q, --quiet Suppress per-tick import-progress lines on
stderr.
--formatted Also fetch the Excel-format
RetrieveFormattedImportJobResults report and
attach it verbatim under formatted_results.
--yes Skip the overwrite confirmation prompt.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm solution import-result
Re-fetch a prior ImportJob and parse its per-component pass/fail results.
Usage:
crm solution import-result [OPTIONS] IMPORT_JOB_ID
Options:
--formatted Also fetch the Excel-format
RetrieveFormattedImportJobResults report and attach
it verbatim under formatted_results.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution info
Show details for one solution (version, managed state, publisher) by unique name.
Usage:
crm solution info [OPTIONS] UNIQUE_NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution job-cancel
Alias for crm async cancel <id>.
Usage:
crm solution job-cancel [OPTIONS] ASYNC_OPERATION_ID
Options:
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution job-status
Alias for crm async get <id> — inspect a solution import/export job.
Usage:
crm solution job-status [OPTIONS] ASYNC_OPERATION_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution layer-conflicts
Report components present in BOTH a managed and an unmanaged solution.
Those are managed components that also carry unmanaged-layer customizations — the potential unmanaged-layer conflicts. Read-only; works identically on v9.x on-prem and Dataverse online. Matching is at solution-component granularity: a customized subcomponent (e.g. one attribute) of a whole-table managed component is its own component and will not show as a conflict.
Usage:
crm solution layer-conflicts [OPTIONS]
Options:
--solution TEXT Managed solution unique name. [required]
--unmanaged-solution TEXT Unmanaged solution unique name. [required]
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm solution list
Usage:
crm solution list [OPTIONS]
Options:
--managed / --unmanaged Filter by managed flag.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global;
also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution missing-components
List components an exported solution needs that this org is missing.
SOLUTION_FILE is a path to an exported solution .zip. The check runs against the connected org (the import target): an empty result means the org already has everything the solution requires. Read-only — run before importing.
Usage:
crm solution missing-components [OPTIONS] SOLUTION_FILE
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution pack
Pack a folder tree back into a solution zip (offline; pac solution pack).
OFFLINE local-file transform — no connection or profile required.
Usage:
crm solution pack [OPTIONS]
Options:
--zipfile FILE Destination solution zip to build.
[required]
--folder DIRECTORY Source folder tree to pack. [required]
--package-type [unmanaged|managed|both]
pac --packagetype (default Unmanaged).
--pac-path FILE Path to the pac executable (else CRM_PAC
env, then PATH).
--timeout INTEGER pac subprocess timeout in seconds.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm solution publish
Call PublishXml with a Publish Request Schema XML payload.
Usage:
crm solution publish [OPTIONS]
Options:
--xml TEXT Inline Publish Request Schema XML.
--xml-file FILE Path to a Publish Request Schema XML file.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution publish-all
Call PublishAllXml — publish every unpublished customization.
Usage:
crm solution publish-all [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution remove-component
Remove a component from an unmanaged solution (RemoveSolutionComponent).
Usage:
crm solution remove-component [OPTIONS]
Options:
--solution TEXT Target unmanaged solution unique name. [required]
--type TEXT Component type: integer or friendly name (e.g. 61 or
webresource). [required]
--id GUID Component GUID (objectid) to remove. [required]
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution set-version
Update an unmanaged solution's version / friendly name / description in place.
Usage:
crm solution set-version [OPTIONS] UNIQUE_NAME
Options:
--version TEXT New 4-part dotted version, e.g. 2.0.0.0.
--friendly-name TEXT New friendly (display) name.
--description TEXT New description.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution stage-and-upgrade
Stage a managed-solution upgrade as a holding solution (ImportSolution HoldingSolution).
Stages only by default; pass --promote (with --solution) to also apply the upgrade via DeleteAndPromote, replacing the base solution.
Usage:
crm solution stage-and-upgrade [OPTIONS] ZIP_PATH
Options:
--promote After staging, apply the upgrade with
DeleteAndPromote (replaces the base solution).
Requires --solution.
--solution TEXT Unique name of the staged solution to promote
(required with --promote).
--no-publish
--no-overwrite
--skip-dependency-check Set ImportSolution SkipProductUpdateDependencies to
proceed past a product-update dependency block.
--timeout INTEGER Async operation timeout in seconds. Overrides
profile.async_timeout.
--no-retry Disable the 429/5xx retry loop for this invocation.
-q, --quiet Suppress per-tick import-progress lines on stderr.
--formatted Also fetch the Excel-format
RetrieveFormattedImportJobResults report and attach
it verbatim under formatted_results.
--yes Skip the staging/promote confirmation prompt.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global;
also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution uninstall
Uninstall (delete) a solution (DELETE /solutions).
Pre-checks RetrieveDependenciesForUninstall and refuses with the blocker list unless --force. For a managed base solution the server also uninstalls its patches.
Usage:
crm solution uninstall [OPTIONS]
Options:
--solution TEXT Unique name of the solution to uninstall. [required]
--force Uninstall even if dependency blockers exist (skip the
pre-check).
--yes Skip interactive confirmation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm solution validate
Statically validate a solution zip before import.
OFFLINE by default -- no connection or profile required. --against-org adds online checks (GUID collisions, web-resource & option-set existence). Exits non-zero when any error-severity problem is found.
Usage:
crm solution validate [OPTIONS] ZIP_PATH
Options:
--against-org Also run online checks against the connected org
(form/view + BPF process-stage GUID collisions, web-
resource & option-set existence). Requires a
connection/profile.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm theme
Author application themes (product branding: colors, logo) headlessly.
A theme is an ordinary record; publish promotes one to the active org
theme via PublishTheme. Themes are NOT solution-aware — they do not travel
with a solution export, so there is no --solution flag here.
Usage:
crm theme [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm theme create
Create a theme. Set branding columns with repeatable --set FIELD=VALUE.
Usage:
crm theme create [OPTIONS]
Options:
--name TEXT Theme name. [required]
--set FIELD=VALUE Repeatable; a theme branding column, e.g. --set
maincolor=#0066cc. VALUE is parsed as JSON with a
raw-string fallback.
--logo TEXT Web resource name or GUID to bind as the theme logo.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm theme get
Get a single theme by THEME_ID (branding columns included).
Usage:
crm theme get [OPTIONS] THEME_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm theme list
List all themes (org-wide; summary columns only — use theme get for colors).
Usage:
crm theme list [OPTIONS]
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm theme publish
Publish THEME_ID as the active org theme (PublishTheme).
Usage:
crm theme publish [OPTIONS] THEME_ID
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm theme update
Update THEME_ID's name, branding columns (--set), and/or --logo.
Usage:
crm theme update [OPTIONS] THEME_ID
Options:
--name TEXT New theme name.
--set FIELD=VALUE Repeatable; a theme branding column, e.g. --set
maincolor=#0066cc. VALUE is parsed as JSON with a
raw-string fallback.
--logo TEXT Web resource name or GUID to bind as the theme logo.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm translation
Export / import localizable display labels for a solution.
Usage:
crm translation [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm translation export
Export all translations for SOLUTION to a zip (CrmTranslations.xml).
Usage:
crm translation export [OPTIONS]
Options:
--solution TEXT Unique name of the solution whose labels to export.
[required]
-o, --output FILE [required]
--timeout INTEGER Read timeout in seconds for the export request.
Overrides profile.async_timeout.
--no-retry Disable the 429/5xx retry loop for this invocation.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm translation import
Import a translations zip; labels surface only after publishing.
Usage:
crm translation import [OPTIONS] ZIP_PATH
Options:
--timeout INTEGER Read timeout in seconds for the import request.
Overrides profile.async_timeout.
--no-retry Disable the 429/5xx retry loop for this invocation.
--yes Skip the overwrite confirmation prompt.
--publish Publish all customizations after a successful import.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm view
Create and manage system views (savedquery).
Usage:
crm view [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm view add-filter
Add FetchXML filter condition(s) to VIEW on ENTITY (by name or savedqueryid).
Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.
Usage:
crm view add-filter [OPTIONS] ENTITY VIEW
Options:
--query-type [public|advanced-find|associated|quick-find|lookup]
Saved-query type to resolve the view by
(with its name). [default: public]
--condition TEXT Add a filter condition '<attribute>
<operator> [value ...]' (repeatable).
Operator must be a FetchXML condition
operator; value count must match it ('null'
none, 'between' two, 'in' a list).
[required]
--type [and|or] Combine the condition(s) into an and/or
filter. [default: and]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm view create
Create a system view on ENTITY (public by default; see --query-type).
Usage:
crm view create [OPTIONS] ENTITY
Options:
--name TEXT View display name. [required]
--otc INTEGER Entity ObjectTypeCode (from `metadata entity
<name>`). [required]
--column TEXT Repeatable 'logicalname[:width]'. Order
preserved. [required]
--order-by TEXT Sort attribute, optional 'asc'/'desc' suffix
(e.g. 'createdon desc'). Default: ascending.
--filter-active Filter to statecode=0 (active) rows.
--default Mark as the default view.
--if-exists [error|skip]
--query-type [public|advanced-find|associated|quick-find|lookup]
Saved-query type to create. [default:
public]
--description TEXT View description.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm view edit-columns
Edit the grid columns of VIEW on ENTITY (by name or savedqueryid).
Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.
Usage:
crm view edit-columns [OPTIONS] ENTITY VIEW
Options:
--query-type [public|advanced-find|associated|quick-find|lookup]
Saved-query type to resolve the view by
(with its name). [default: public]
--add TEXT Add a column 'logicalname[:width]'
(repeatable). Adds both the layout cell and
the fetch attribute.
--remove TEXT Remove a column by logical name
(repeatable).
--width TEXT Resize an existing column
'logicalname:width' (repeatable).
--reorder TEXT Comma-separated logical names giving the new
column order (must be a permutation of the
current columns; not combinable with
--add/--remove/--width).
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm view list
List the public views (savedquery) for an entity.
Usage:
crm view list [OPTIONS] ENTITY
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm view remove-filter
Remove FetchXML filter condition(s) from VIEW on ENTITY (by name or id).
Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.
Usage:
crm view remove-filter [OPTIONS] ENTITY VIEW
Options:
--query-type [public|advanced-find|associated|quick-find|lookup]
Saved-query type to resolve the view by
(with its name). [default: public]
--condition TEXT Remove a filter condition matching
'<attribute> <operator> [value ...]'
(repeatable). Add value(s) to disambiguate
when several conditions share the same
attribute and operator. [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm view set-order
Set the sort order of VIEW on ENTITY (by name or savedqueryid).
Editing an out-of-box / managed view creates an unmanaged layer that a solution upgrade may revert.
Usage:
crm view set-order [OPTIONS] ENTITY VIEW
Options:
--query-type [public|advanced-find|associated|quick-find|lookup]
Saved-query type to resolve the view by
(with its name). [default: public]
--order TEXT Replace the sort with '<attribute>
[asc|desc]' (repeatable to sort by several
attributes, in order).
--add-order TEXT Append '<attribute> [asc|desc]' to the
current sort (repeatable).
--clear-order Remove all sorting.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution
Default for a deliberate Default-Solution-
only write.
--publish / --no-publish Run PublishAllXml after the change. Default:
stage (no publish); run `solution publish-
all` when your set is done.
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these
comma-separated top-level keys. [global;
also valid before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also
valid before the command]
--dry-run Preview writes without issuing them; reads
run normally. [global; also valid before
the command]
-h, --help Show this message and exit.
crm webresource
Create and manage web resources (HTML/JS/CSS/images).
Usage:
crm webresource [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm webresource create
Create a web resource.
Usage:
crm webresource create [OPTIONS]
Options:
--name TEXT Web resource unique name, e.g.
'cwx_/scripts/foo.js'. [required]
--file FILE Source file whose bytes become the web resource
content. [required]
--display TEXT Display name (defaults to the unique name).
--type INTEGER Override the D365 webresourcetype int; inferred
from the file extension if omitted.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm webresource delete
Delete a web resource by unique name or id.
Usage:
crm webresource delete [OPTIONS] NAME
Options:
--yes Skip interactive confirmation.
--check-dependencies Preview blocking dependencies
(RetrieveDependenciesForDelete) in the result; pairs
with --dry-run. Informational — does not block.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm webresource get
Resolve a web resource by name and print its record.
Usage:
crm webresource get [OPTIONS] NAME
Options:
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm webresource list
List web resources.
Usage:
crm webresource list [OPTIONS]
Options:
--custom-only Only unmanaged web resources.
--top INTEGER Limit to the first N rows.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm webresource push
Walk DIRECTORY and upsert every file as a web resource, publishing once.
The filesystem is the source of truth: a missing resource is created, a
changed one updated, a byte-identical one skipped, and all changes are
published once at the end (PublishAllXml) — nothing publishes mid-run. A
per-file failure is reported without aborting the rest. Honors the global
--dry-run flag (lists the would-create / would-update sets, writes nothing)
and --stage-only / --no-publish (write the resources, defer the publish).
For a continuous redeploy loop, pair with a file watcher, e.g.
find webresources -name '*.js' | entr crm webresource push webresources --prefix cwx.
Usage:
crm webresource push [OPTIONS] DIRECTORY
Options:
--prefix TEXT Publisher customization prefix (2-8 alphanumerics,
starts with a letter, not 'mscrm'); each file maps
to web resource name '<prefix>_<relpath>' (path
relative to DIRECTORY, '/' separators, type
inferred from extension). [required]
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm webresource update
Update a web resource by name (content and/or display name).
Usage:
crm webresource update [OPTIONS] NAME
Options:
--file FILE New source file whose bytes replace the web
resource content.
--display TEXT New display name.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default for
a deliberate Default-Solution-only write.
--publish / --no-publish Run PublishAllXml after the change. Default: stage
(no publish); run `solution publish-all` when your
set is done.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow
List, activate, and trigger D365 workflows.
Usage:
crm workflow [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
crm workflow activate
Activate a workflow (statecode=1, statuscode=2).
An activation-record GUID (type=2) is resolved to its parent definition automatically and the state change is applied to the parent.
Usage:
crm workflow activate [OPTIONS] WORKFLOW_ID
Options:
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow clone
Clone a workflow definition onto another entity (xaml-retargeted).
Usage:
crm workflow clone [OPTIONS] WORKFLOW_ID
Options:
--to-entity TEXT Logical name of the entity to clone the workflow
onto. [required]
--name TEXT Name for the clone. Default: '<source> (Clone)'.
--activate / --no-activate Activate the clone after creating it (compiles
the xaml). Default: activate.
--solution TEXT Target unmanaged solution uniquename
(MSCRM.SolutionUniqueName). Required for
customization writes; pass --solution Default
for a deliberate Default-Solution-only write.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-
object-id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm workflow deactivate
Deactivate a workflow (statecode=0, statuscode=1).
An activation-record GUID (type=2) is resolved to its parent definition automatically and the state change is applied to the parent.
Usage:
crm workflow deactivate [OPTIONS] WORKFLOW_ID
Options:
--yes Skip interactive confirmation.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow delete
Delete a workflow definition, deactivating it first if active.
An activation-record GUID (type=2) is resolved to its parent definition; deleting the definition removes the activation record server-side. Not atomic: if the deactivate lands but the delete fails, the definition remains a draft (no rollback).
Usage:
crm workflow delete [OPTIONS] WORKFLOW_ID
Options:
--yes Skip interactive confirmation.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow export
Export a workflow definition (incl. xaml) to a JSON file.
Usage:
crm workflow export [OPTIONS] WORKFLOW_ID
Options:
-o, --output FILE Write the workflow definition to this JSON file.
Default: stdout only.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow import
Import (upsert) a workflow definition from an exported JSON file.
Usage:
crm workflow import [OPTIONS]
Options:
--file FILE Exported workflow JSON file to upsert.
[required]
--activate / --no-activate Activate after import. Default: leave as draft.
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-
object-id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.
crm workflow list
List workflow definitions.
Usage:
crm workflow list [OPTIONS]
Options:
--category CATEGORY Filter by category. Accepts an integer (0–5) or a
friendly name: workflow, dialog, businessrule,
action, bpf, flow.
--entity TEXT Filter by primary entity logical name.
--activated / --all Restrict to activated workflows. Default returns all
states.
--on-demand Only on-demand workflows.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow migration-assess
Assess classic workflows for migration to cloud (Power Automate) flows.
Inventories category-0 workflow definitions and flags blockers from the MS capability table: real-time (synchronous) mode, wait conditions, and custom workflow activities. Read-only. Blockers are "needs redesign" signals, not verdicts of impossibility. On an on-prem profile the report still runs and carries an advisory note (cloud flows live only on Dataverse online).
Usage:
crm workflow migration-assess [OPTIONS]
Options:
--entity TEXT Filter by primary entity logical name.
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid before
the command]
--jq PROGRAM Run a jq program over the curated data payload; the
result replaces data. Implies --json. [global; also
valid before the command]
--profile TEXT Connection profile name. [global; also valid before
the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow run
Trigger an on-demand workflow against a target record via ExecuteWorkflow.
Usage:
crm workflow run [OPTIONS] WORKFLOW_ID
Options:
--target TEXT GUID of the record to run the workflow against.
[required]
--as-user GUID Impersonate systemuser by GUID via MSCRMCallerID
header. Mutually exclusive with --as-user-object-
id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global; also
valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data payload;
the result replaces data. Implies --json.
[global; also valid before the command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the command]
-h, --help Show this message and exit.
crm workflow update
Edit a workflow definition's metadata, or replace its step XAML.
Metadata path (default) — edit name, scope, triggers, on-demand. Works on both targets (not provenance-gated). A published (activated) definition is edited via an automatic deactivate -> edit -> reactivate cycle; a draft is edited in place. Only the fields you pass change.
XAML logic path (--xaml-file) — replace the whole step definition. This is on-premises only; on Dataverse it refuses up front with the provenance wall. The blob is reference-validated against the entity's live attribute set (warnings land on meta.warnings; --strict promotes them to a failure), then driven deactivate-if-active -> PATCH xaml -> reactivate. A failed reactivation rolls back to the prior XAML by default (--no-rollback keeps the rejected one). An activation-record GUID (type=2) resolves to its parent definition first in either path.
Usage:
crm workflow update [OPTIONS] WORKFLOW_ID
Options:
--name TEXT New display name.
--scope SCOPE Execution scope. Integer (1–4) or a name:
user, businessunit, parentchildbusinessunits,
organization.
--on-demand / --no-on-demand Toggle whether the workflow can be run on
demand.
--on-create / --no-on-create Toggle the trigger-on-create flag.
--on-delete / --no-on-delete Toggle the trigger-on-delete flag.
--on-update-attributes TEXT Comma-separated attribute logical names that
trigger the workflow on update. Pass an empty
string to clear it (disables the on-update
trigger).
--xaml-file FILE Replace the workflow's step logic with the
XAML in this file (whole-definition replace).
On-premises only — refuses on Dataverse.
Mutually exclusive with the metadata flags
above.
--strict With --xaml-file: promote any reference-
validation warning to a hard failure before
writing.
--rollback / --no-rollback With --xaml-file: on reactivation failure,
restore the prior XAML (default). --no-
rollback leaves the rejected XAML in place for
inspection.
--as-user GUID Impersonate systemuser by GUID via
MSCRMCallerID header. Mutually exclusive with
--as-user-object-id.
--as-user-object-id GUID Impersonate by Entra ID object id (cloud) via
CallerObjectId header. Mutually exclusive with
--as-user.
--suppress-dup-detection Send MSCRM.SuppressDuplicateDetection: true.
--bypass-plugins Send MSCRM.BypassCustomPluginExecution: true
(requires prvBypassCustomPluginExecution).
--json Emit machine-readable JSON output. [global;
also valid before the command]
--fields KEY[,KEY...] Project the data payload down to these comma-
separated top-level keys. [global; also valid
before the command]
--jq PROGRAM Run a jq program over the curated data
payload; the result replaces data. Implies
--json. [global; also valid before the
command]
--profile TEXT Connection profile name. [global; also valid
before the command]
--dry-run Preview writes without issuing them; reads run
normally. [global; also valid before the
command]
-h, --help Show this message and exit.