dv-admin について
dv-admin は、Dataverse 環境の設定、保持ポリシー、ごみ箱、一括削除を管理する環境管理者向けのスキルです。変更可能な設定を限定し、リスクのある操作や状態変更の前に内容提示と確認を求めます。
主な機能
- 01許可リスト内の組織設定の読み取りと更新
- 02ごみ箱と保持日数の管理
- 03一括削除の予約、一時停止、取り消し
- 04設定に応じた CLI または Python SDK の選択
- 05複数環境での並列操作
活用シーン
- 01監査や検索設定の確認・変更
- 02組織レベルのごみ箱と保持期間の設定
- 03条件付きレコード一括削除の予約
- 04複数環境の設定確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ microsoft/ dataverse-skills --skill dv-adminインストール後、Claude Code で/dv-adminを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/erp-batch.mdorgdb-settings.mdrecycle-bin.mdsettings-overrides.md詳細
スキル:環境管理 — 一括削除、保持、組織設定、OrgDB、ごみ箱
⚠️ 重要な安全ルール — 最初にお読みください
- 一括削除は取り消しできず、ごみ箱を経由しません。
pac data bulk-delete scheduleを--fetchxmlなしで実行すると、テーブル内のすべてのレコードが削除されます。ユーザーが「ALL」(または「ALL RECORDS」)とエンティティの論理名を明示するまで、実行を拒否してください。例:"yes, delete ALL records in contact"。単なる"yes"は受け付けません。空のフィルターを指定した FetchXML でも、この制限は回避できません。完全なルールと確認手順については、一括削除コマンドを参照してください。- 設定の許可リストは厳守してください。 許可された設定に記載された 37 個の PPAC トグルのみ、読み取りまたは更新が許可されています。それ以外の設定は必ず拒否してください:「この設定は dv-admin の対象外です。Power Platform 管理センターを使用してください。」
- ごみ箱の無効化には PATCH を使い、DELETE は使わないでください。
PATCH statecode=1, statuscode=2, isreadyforrecyclebin=false。DELETE は非同期のオプトアウト処理をキューに追加し、エンティティごとの設定を孤立させます。references/recycle-bin.mdを参照してください。- システムテーブルに関する警告。
systemuser、businessunit、organization、またはroleに対するフィルターなしの一括削除は、環境を破損させます。実行前に、追加の警告を行ってください。
4 つの仕組み — 設定の保存場所に応じて選択してください:
| 仕組み | 用途 | 方法 |
|---|---|---|
PAC CLI(pac org update-settings / list-settings) | organization エンティティの列(監査、プラグインのトレース、タイプアヘッド、クイック検索、キャンバス/フロー ソリューション、メール検証、監査保持) | --name <column> --value <value> — 旧式の監査関連項目だけでなく、任意の組織列を指定できます |
| Python SDK — OrgDB XML | orgdborgsettings XML blob 内のキー(MCP、検索、Fabric、Work IQ、TDS エンドポイント、添付ファイルのセキュリティ、所有権、住所レコード、非管理対象のブロック、ユーザーの削除、Excel AI) | XML を読み取り → 解析 → 変更 → organizations({id}) 上の blob 全体を PATCH で書き戻す |
| Python SDK — recyclebinconfigs | ごみ箱の有効/無効と保持日数 | recyclebinconfigs エンティティレコードを CREATE/PATCH する |
| Python SDK — settingdefinition + organizationsettings | アプリレベル/プランレベルのセキュリティロールのトグル | settingdefinition を uniquename で検索 → value を指定して organizationsettings の行を CREATE または PATCH する |
ERP の一括管理については、references/erp-batch.mdを参照してください。計画のみを目的とする ERP リクエストではスキル/リファレンスを参照できますが、環境への呼び出しやファイルへの書き込みは行わないでください。
PAC CLI で処理できる操作のために、Python スクリプトを作成しないでください。仕組みを混在させないでください(例:PAC CLI で対応できる組織列を手動で PATCH しないでください)。
スキルの範囲
レコードの CRUD とサンプルデータには dv-data、テーブル/列/リレーションシップには dv-metadata、レコードの読み取りには dv-query、ソリューションのエクスポート/インポートには dv-solution、ロールと自己権限昇格には dv-security を使用してください。テナントガバナンス(DLP、環境のライフサイクル)には pac admin --help を使用してください。
許可された設定 — 厳格な許可リスト
以下の 37 個の PPAC トグルのみ、このスキルで読み取りまたは更新できます(バックエンドキーは重複を除いて 35 個です。SearchAndCopilotIndexMode と auditretentionperiodv2 は、それぞれ 2 つのトグルに対応します)。上記の安全ルールにより対象外となり、拒否が必要な設定の例:sessiontimeoutinmins、isautosaveenabled、IsShadowLakeEnabled、IsArchivalEnabled。--filter なしで pac org list-settings を実行しないでください。また、許可リストにない設定を調べるために orgdborgsettings XML 全体を出力しないでください。
組織エンティティの列 — PAC CLI を使用(14)
読み取りには pac org list-settings --filter <column>、書き込みには pac org update-settings --name <column> --value <value> を使用します。PAC CLI は、従来の監査関連の列に限らず、組織エンティティの任意の列を受け付けます。
| # | PPAC のラベル | 列 | 型 |
|---|---|---|---|
| 1 | 監査を開始 | isauditenabled | bool |
| 2 | ユーザーアクセスを監査(アクセスログ) | isuseraccessauditenabled | bool |
| 3 | 読み取り監査を開始(読み取りログを Purview に送信) | isreadauditenabled | bool |
| 4 | プラグインのトレースログ設定 | plugintracelogsetting | int: 0 オフ、1 例外、2 すべて |
| 5 | 単一テーブル検索オプション | tablescopeddvsearchinapps | bool |
| 6 | クイック検索語句での遅いキーワードフィルターを防止 | allowleadingwildcardsinquickfind | int: 0 防止、1 許可(UI で「防止=オン」の場合は 0 に切り替わります) |
| 7 | クイック検索のレコード制限 | quickfindrecordlimitenabled | bool |
| 8 | グリッド/サブグリッドでの検索にクイック検索ビューを使用 | usequickfindviewforgridsearch | bool |
| 9 | 既定で Dataverse ソリューションにキャンバスアプリを含める | enablecanvasappsinsolutionsbydefault | bool |
| 10 | 既定で Dataverse ソリューションにクラウドフローを含める | enableflowsinsolutionbydefault | bool(注:solution は単数形です) |
| 11 | メールアドレスの検証を有効化(プレビュー) | isemailaddressvalidationenabled | bool |
| 12 | 入力候補を表示するまでに必要な最小文字数 | lookupcharactercountbeforeresolve | int(0~MAX_INT、null = 機能オフ) |
| 13 | 検索を開始する文字入力間の遅延 | lookupresolvedelayms | int ミリ秒(既定値 250) |
| 14 | 監査ログの保持ポリシー/カスタム保持期間(日数) | auditretentionperiodv2 | int 日(-1 = 無期限、プリセットは 30/90/180/365/730/2555、最大 365000) |
OrgDB XML キー — orgdborgsettings BLOB で Python SDK を使用(17)
PascalCase は重要です(IsMCPEnabled であり、IsMcpEnabled ではありません)。PPAC のラベルと型を含むキーの全一覧は、references/orgdb-settings.md にあります。主なキー:IsMCPEnabled、IsMCPPreviewEnabled、SearchAndCopilotIndexMode、IsLinkToFabricEnabled、IsFabricVirtualTableEnabled、ShowDataInM365Copilot、EnableWorkIQ、IsLockdownOfUnmanagedCustomizationEnabled、EnableSecurityOnAttachment、EnableTDSEndpoint、AllowAccessToTDSEndpoint、EnableOwnershipAcrossBusinessUnits、CreateOnlyNonEmptyAddressRecordsForEligibleEntities、EnableDeleteAddressRecords、BlockDeleteManagedAttributeMap、EnableSystemUserDelete、IsExcelToExistingTableWithAssistedMappingEnabled。
SearchAndCopilotIndexMode は、2 つの UI トグル(Dataverse 検索 × M365 Copilot 検索)を表す 1 つの int 値(0~3)です。
| 値 | Dataverse 検索 | M365 Copilot 検索 |
|---|---|---|
0 | オフ | オン |
1 | オン | オン |
2 | オフ | オフ |
3 | オン | オフ |
recyclebinconfigs エンティティ — Python SDK を使用(2、組織レベルのみ)
2 つのトグルは、組織エンティティの MetadataId でフィルターした組織レベルの recyclebinconfigs 行を操作します。有効/無効(statecode + statuscode + isreadyforrecyclebin)と、クリーンアップ日数(cleanupintervalindays)です。テーブル単位のトグルは対象外です。「contact のみごみ箱を有効にする」といったリクエストには応じません。ライフサイクルの全体像は references/recycle-bin.md にあります。
settingdefinition + organizationsettings — Python SDK を使用(2)
許可リストに含まれる 2 つのトグルで、どちらも bool 値が文字列として保存されます。PowerAppsAppLevelSecurityRolesEnabled(キャンバスアプリ)、PlanShareSecurityRolesEnabled(プランデザイナー)です。既定値は settingdefinition から読み取り、オーバーライドには organizationsettings の CREATE/PATCH を使用します。Python の全コードは references/settings-overrides.md にあります。
実行前のプレビュー
- 破壊的/状態を変更する操作(一括削除のスケジュール設定/キャンセル/一時停止/再開、設定の更新、ごみ箱の切り替え、ロールの割り当て、権限の自己昇格、保持期間の設定)— 変更内容、新しい値、対象環境を文章でプレビューします。不明な値にはプレースホルダー(
<ENV_URL>)を使い、不足している値は同じターン内で確認します。生の CLI ブロックは省略します。 - 読み取り専用(設定一覧、ジョブの表示、OrgDB/ごみ箱の状態の読み取り)— 1 文の文章によるプレビューで十分です。
ユーザーは最初の応答で操作の内容を評価できる必要があります。単に 「どの環境ですか?」 と尋ねるのは不十分です。1 行の文章によるプレビューなら問題ありません。
例
一括削除の一時停止(ID 指定あり、破壊的操作):
- ❌ 「このコマンドには承認が必要です。ジョブを一時停止してよいか確認してください。」
- ✅ 「アクティブな環境で一括削除ジョブ
<job-id>を一時停止します。続行してよいか確認してください。」
N 個の環境の監査状態を確認(読み取り専用、複数回の呼び出し):
- ❌ 環境ごとに
pac org fetchを順番に実行する。または、単なるクエリのように感じるという理由で Python/SDK を使い始める。 - ✅ 「
pac org list-settings --filter auditを N 個すべての環境で並列実行します(1 回の&バッチ、waitは 1 回)。」
Org 設定の読み取りまたは更新方法
Org 設定には必ず pac org list-settings/pac org update-settings を使います — Org 列に対して、生の Web API、FetchXML、PowerShell、Python を使ってはいけません。カテゴリを読み取る場合は --filter <substring> を使って 1 回で取得します。複数環境での操作は、& + wait を使って並列実行します(1 回の bash 呼び出し)。
単一の設定:
pac org list-settings --filter isauditenabled --environment <url>
カテゴリの読み取り(1 回の呼び出しですべての一致項目を返します。例:すべての監査設定):
pac org list-settings --filter audit --environment <url>
複数環境 — 1 回の bash 呼び出しで並列実行:
pac org list-settings --filter audit --environment <url1> &
pac org list-settings --filter audit --environment <url2> &
pac org list-settings --filter audit --environment <url3> &
wait
pac org list-settings が設定に対して失敗する場合、その設定は Org 列ではありません。冒頭の 4 つのメカニズムの表で適切な処理方法を確認し、該当する Python パターンを使ってください。Org 列に対して Web API、PowerShell、FetchXML、pac org fetch に切り替えてはいけません。
前提条件
- PAC CLI の 最新の .NET Framework ビルド —
pac data bulk-delete/pac data retentionは .NET Framework ビルドでのみ利用できます(dotnet toolバージョンでは利用できません)。pac helpを確認し、.NET 10/.NET 8と表示される場合は、pac install latest && pac use latestを実行します。 - 認証済み(
pac auth create)、アクティブなプロファイル(pac auth list)、および対象環境のシステム管理者権限。 - ヘッドレスホスト:SDK はほとんどの設定を処理します(それらは
organizationレコードです)。PAC でしか扱えない項目にはサービスプリンシパルを使用します。dv-connect/references/headless-hosts.mdを参照してください。
複数環境での操作 — 常に並列実行
list-settings と同じ & + wait パターンを、複数環境でのすべての操作(update-settings、bulk-delete など)に適用します。1 回の bash 呼び出しで N 個の呼び出しをバックグラウンド実行し、順番に実行したり for ループを使ったりしてはいけません。
よくある間違い — 以下は使わないでください
これらのフラグは存在しません。使用するとエラーになります。
一括削除
| 誤り | 正しい方法 |
|---|---|
--filter | FetchXML 文字列を指定して --fetchxml を使う |
--query / --where / --condition | --fetchxml を使う |
--date / --before / --older-than | FetchXML の <condition> に日付を指定する |
--job-id | --id を使う |
--all / --purge / --truncate | すべてのレコードを対象にするには --fetchxml を省略する(先にユーザーに警告する) |
保持
| 誤り | 正しい方法 |
|---|---|
--fetchxml | --criteria を使う(FetchXML の形式は同じですが、フラグ名が異なります) |
--filter / --query / --policy | --criteria を使う |
--enable / --activate | pac data retention enable-entity を使う |
--table | --entity を使う |
--operation-id / --job-id / --guid | --id を使う |
Org 設定
| 誤り | 正しい方法 |
|---|---|
--enable-audit / --audit | --name isauditenabled --value true を使う |
--trace / --plugin-trace / --logging | --name plugintracelogsetting --value 2 を使う |
--setting / --key / --flag | --name を使う |
オプションセットに "all" や "enabled" などの文字列値を指定する | 整数を使う:0、1、2 |
一括削除コマンド
一括削除ジョブのスケジュール
pac data bulk-delete schedule --entity activitypointer \
--fetchxml "<fetch><entity name='activitypointer'><filter><condition attribute='createdon' operator='lt' value='2024-01-01'/></filter></entity></fetch>"
pac data bulk-delete schedule --entity email \
--fetchxml "<fetch><entity name='email'><filter><condition attribute='createdon' operator='lt' value='2024-06-01'/></filter></entity></fetch>" \
--job-name "Cleanup old emails" --recurrence "FREQ=DAILY;INTERVAL=1"
| 引数 | エイリアス | 必須 | 説明 |
|---|---|---|---|
--entity | -e | はい | テーブルの論理名 |
--fetchxml | -fx | いいえ | FetchXML フィルター。以下のハードストップルールを参照してください。省略すると、テーブル内のすべてのレコードが削除されます。 |
--job-name | -jn | いいえ | ジョブの説明的な名前 |
--start-time | -st | いいえ | ISO 8601 の開始時刻。デフォルトは現在時刻です |
--recurrence | -r | いいえ | RFC 5545 パターン(例:FREQ=DAILY;INTERVAL=1) |
--environment | -env | いいえ | 対象環境の URL |
ハードストップ:--fetchxml がない場合、すべてのレコードが対象
pac data bulk-delete schedule は、--fetchxml を指定しないとテーブル内のすべてのレコードを対象とし、取り消しできません(ごみ箱を経由しません)。必須の確認手順:
- ユーザーが ALL(または ALL RECORDS)という語とエンティティの論理名を明示して確認するまで拒否します。例:「はい、contact の ALL records を削除してください」。単なる「はい」は拒否します。
- あいまいな依頼(「古いメールを整理して」など)の場合は、コマンドを提示する前に、日付/statecode/owner の条件を使った FetchXML フィルターを提案して、対象を明確にします。
- 空のフィルターを使った FetchXML でも確認手順は回避できません。
<filter/>または<filter><condition><value/></condition></filter>も、すべてのレコードを対象とします。 - 対象範囲:
bulk-delete scheduleのみに適用します。cancel、pause、resume、show、listには不要です。
システムテーブル(systemuser、businessunit、organization、role)の場合、フィルターなしの一括削除を行うと環境が壊れることも追加で警告してください。
ジョブの管理
pac data bulk-delete list --environment https://myorg.crm.dynamics.com
pac data bulk-delete show --id <job-id>
pac data bulk-delete pause --id <job-id>
pac data bulk-delete resume --id <job-id>
pac data bulk-delete cancel --id <job-id>
保持/アーカイブコマンド
データ保持では、古いレコードを完全に削除せず、長期ストレージに移動します。
エージェントによるフロー
Step 1: pac data retention enable-entity --entity activitypointer
Step 2: pac data retention list
Step 3: pac data retention set --entity activitypointer --criteria "<fetchxml>..."
Step 4: pac data retention show --id <config-id>
コマンド
pac data retention enable-entity --entity activitypointer --environment https://myorg.crm.dynamics.com
pac data retention set --entity activitypointer \
--criteria "<fetch><entity name='activitypointer'><filter><condition attribute='createdon' operator='lt' value='2023-01-01'/></filter></entity></fetch>"
pac data retention list --environment https://myorg.crm.dynamics.com
pac data retention show --id <config-id>
pac data retention status --id <operation-id>
| 引数 | エイリアス | 必須 | 説明 |
|---|---|---|---|
--entity | -e | はい | テーブルの論理名 |
--criteria | -c | はい | アーカイブするレコードを定義する FetchXML |
--start-time | -st | いいえ | ISO 8601 の開始時刻。デフォルトは現在時刻です |
--recurrence | -r | いいえ | RFC 5545 の繰り返しパターン |
--environment | -env | いいえ | 対象環境の URL |
保持と一括削除の比較
| シナリオ | 使用する機能 |
|---|---|
| データが不要になったため、完全に削除する | 一括削除 |
| コンプライアンスのため、データを保持する必要がある | 保持(アーカイブ) |
組織設定コマンド
設定の一覧表示
pac org list-settings --environment https://myorg.crm.dynamics.com
pac org list-settings --filter isauditenabled --environment https://myorg.crm.dynamics.com
設定の更新
pac org update-settings --name isauditenabled --value true --environment https://myorg.crm.dynamics.com
pac org update-settings --name plugintracelogsetting --value 2 --environment https://myorg.crm.dynamics.com
引数: --name <column>(必須)、--value <value>(必須。bool には true/false、オプションセットには int)、--environment <url>(任意)。使用できる列は許可された設定に記載された14個です。それ以外は対象外です。
一括処理のワークフロー: pac admin list → 対象を絞り込み → 確認 → すべての update-settings 呼び出しを並列実行(& + wait)→ サマリーテーブルを表示します。
高度な設定(Python SDK — PAC CLI では対応できません)
OrgDB、ごみ箱、設定定義のオーバーライドには、それぞれ生の Web API または Python SDK が必要です。PAC CLI では対応していません。このスキルの冒頭にある4つの方式のルーティング表(§ スキル)では、各設定で使用する方式を示しています。以下のサブセクションではパターンを要約し、完全な Python の説明があるリファレンスにリンクしています。
OrgDB 設定(orgdborgsettings XML)
OrgDB 設定は、organizations エンティティの orgdborgsettings 列に PascalCase の XML 要素として保存されています。PAC CLI では読み取りも書き込みもできないため、raw Web API を使用してください。
クイックリファレンス: GET /organizations?$select=organizationid,orgdborgsettings → xml.etree.ElementTree で XML を解析 → 変更または SubElement → シリアル化した XML を指定して PATCH /organizations({id})。
読み取り/更新/削除の Python パターンと 17 個のキーの許可リストについては、references/orgdb-settings.md を参照してください。キーでは大文字と小文字が区別されます(IsMcpEnabled ではなく IsMCPEnabled)。
ごみ箱の構成
ごみ箱の設定は recyclebinconfigs エンティティに保存されます(orgdborgsettings ではありません)。PAC CLI では管理できないため、raw Web API を使用してください。
クイックリファレンス: recyclebinconfigs を _extensionofrecordid_value eq <ORG_ENTITY_METADATA_ID> でフィルターします(組織レベルのメタデータ ID はシステム定数です:e1bd1119-6e9d-45a4-bc15-12051e65a0bd)。
- 有効化:
statecode=0, statuscode=1, isreadyforrecyclebin=trueを PATCH します(または新しい構成を POST します)。同期オプトインのパスを強制するには、isreadyforrecyclebin: trueが必要です。 - 無効化:
statecode=1, statuscode=2, isreadyforrecyclebin=falseを PATCH します。DELETE はしないでください — 非同期のオプトアウトがキューに追加され、エンティティごとの構成が孤立します。 - 2 回目の切り替えを行う前に、実行中の
ProcessRecycleBin非同期ジョブ(operationtype eq 50, statecode ne 3)が完了するまで待ちます。
Python によるライフサイクル全体(読み取り/有効化/無効化/非同期ジョブの排出ヘルパー)、キャッシュと DB の競合状態の説明、テーブルごとの対象範囲外のルールについては、references/recycle-bin.md を参照してください。
設定定義のオーバーライド(アプリ/プランのセキュリティロール)
許可リストにある 2 つの切り替え項目(PowerAppsAppLevelSecurityRolesEnabled、PlanShareSecurityRolesEnabled)は、settingdefinition(既定値)と organizationsettings(オーバーライド)の結合に保存されています。PAC CLI では管理できません。
クイックリファレンス: uniquename で settingdefinitionid を検索し、value(文字列の "true"/"false")を指定して organizationsettings 行を CREATE するか、既存の行を PATCH します。オーバーライド行を DELETE すると、既定値に戻ります。
読み取りと冪等な CREATE/PATCH の Python コード、および適用条件に関する注記については、references/settings-overrides.md を参照してください。
運用上の確認ルール
このファイルの冒頭にある安全に関する注意書きの 4 つのルールでは、取り消し不可能な操作や破壊的な操作を扱っています。以下のルールでは、破壊的ではないものの影響の大きい操作を扱います。
- すべてのユーザーに影響する組織設定を変更する前に、確認してください。
- 複数の環境を更新する場合は、対象環境の一覧を示してから確認を取ってください。
- OrgDB 設定については、誤った値により環境の機能が損なわれる可能性があることを警告してください。
- ごみ箱のクリーンアップ間隔を変更する場合は、間隔を短縮すると、再利用されたレコードがより早く完全に削除されることを警告してください。
- ごみ箱の有効化/無効化では、必ず
isreadyforrecyclebinを明示的に設定してください(有効化時は true、無効化時は false)。また、2 回目の切り替えを行う前に、実行中のProcessRecycleBin非同期ジョブが完了するまで待ちます。これらを省略すると、無関係なプラットフォーム操作でEntityBinUpdateAction called for entity <x> which is not enabled for RecycleBinが発生する可能性があります。