M365関連 プログラム 技術

PowerShellでDateverseを操作する

前回Power系のコマンドについて記事を書きましたが、今回はDateverseについて書いていきます

関連記事
PowerShellでPower系(PowerApps、PowerAutomate)を操作する - ナストンのまとめ
PowerShellでPower系(PowerApps、PowerAutomate)を操作する - ナストンのまとめ

今回はPowershellからPowerApps・PowerAutomateのコマンドについて調べたのでそのメモとなりま ...

続きを読む

バージョン
OSWindows 11 Pro
PowerShell
※PowerShell 7だと今回のモジュールが動作しなかったため
5.1.22621.2506
Microsoft.Xrm.Tooling.CrmConnector.PowerShell(モジュール)3.3.0.1007

モジュールをインストールする

XRMツールコマンドが使用できるように以下のコマンドでモジュールをインストールします

Install-Module -Name Microsoft.Xrm.Tooling.CrmConnector.PowerShell

エラーが発生する

いざインストールしようとすると以下の証明書エラーが発生してインストールできないませんでした

Install-Module: Cannot bind parameter because parameter 'Name' is specified more than once. To provide multiple values to parameters that can accept multiple values, use the array syntax. For example, "-parameter value1,value2,value3".

調べたところ『-SkipPublisherCheck』オプションをつければ証明書エラーを回避して対象モジュールをインストールすることができました

Install-Module -Name Microsoft.Xrm.Tooling.CrmConnector.PowerShell -SkipPublisherCheck

接続する

以下のサイトを参考に接続をします

MSサイト
XRM ツールの PowerShell コマンドレットを使用して Microsoft Dataverse に接続する (Dataverse) - Power Apps | Microsoft Learn
XRM ツールの PowerShell コマンドレットを使用して Microsoft Dataverse に接続する (Dataverse) - Power Apps | Microsoft Learn

Get-CrmConnection や Get-CrmOrganizations などの XRMツール の PowerS ...

続きを読む

今回はこのようにして接続をしています

$CRMConn = Get-CrmConnection -InteractiveMode
画像のようなウィンドウが表示されるので適宜変更してください

実際に情報を操作する

以下のサイトを参考にアクセストークンを使用してAPI経由で操作してみます

参考サイト
Microsoft DataverseのテーブルをPowerShellからCRUD操作してみた #PowerApps - Qiita
Microsoft DataverseのテーブルをPowerShellからCRUD操作してみた #PowerApps - Qiita

概要DataverseのテーブルをPowerShellを使用してWeb APIでCRUD操作します。Power Apps ...

続きを読む

if($CRMConn -ne $null -and $CRMConn.IsReady) {
    # エンドポイントURLを取得
    $ConnectedOrgPublishedEndpoints = $CRMConn.ConnectedOrgPublishedEndpoints["WebApplication"]
    # 対象テーブルの複数系になる。crcf6_testだとcrcf6_testsになる
    $targetTable = "crcf6_tests"
    # アクセストークンを取得
    $token = $CRMConn.CurrentAccessToken
    $headers = @{Authorization = " Bearer $token" }
    $endPoint = $ConnectedOrgPublishedEndpoints + 'api/data/v9.2/' + $targetTable

    # 対象テーブルの全データを取得
    $result = Invoke-RestMethod -Uri $endPoint"?$query" -Method 'GET' -Headers $headers
    Write-Output $result.value

    # 対象テーブル上に新たにデータを作成する(POST)
    $body = '{"crcf6_title":"XYZ","crcf6_response_details":"385"}'
    $result = Invoke-RestMethod -Uri $endPoint -Method 'POST' -Headers $headers -Body $body -ContentType "application/json"

    # 対象テーブル上に既存データを更新する(PATCH)
    $body = '{"crcf6_title":"XYZ","crcf6_response_details":"385Update"}'
    $rowId = "対象データのID" # 対象テーブル名idとなっている列の値:【crcf6_testid】
    Invoke-RestMethod -Uri $endPoint"($rowId)" -Method 'PATCH' -Headers $headers -Body $body -ContentType "application/json"

    # 対象テーブル上の既存データの削除(DELETE)
    Invoke-RestMethod -Uri $endPoint"($rowId)" -Method 'DELETE' -Headers $headers
}

最後に

調べてみましたが情報がほとんどなく困ったのですが何とかテーブルの情報操作ができるようになりました。もう少し、実際にさわってみて掘り下げる必要がありそうです

-M365関連, プログラム, 技術
-,