接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でDynamicsCRM Cmdlets を使用する例を示します。
インストールおよび接続
PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。
Install-Module DynamicsCRMCmdlets
プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。
Import-Module DynamicsCRMCmdlets;
Connect-DynamicsCRM cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = Connect-DynamicsCRM -CRMVersion "CRM2011+" -Url "http://MySite/MyOrganization" -User "MyUser" -Password "MyPassword"
Microsoft Dynamics CRM への接続
接続するには、Url に組織のルートURL を設定し、User、Password、およびCRMVersion を設定します。
オンプレミスCRM への認証
オンプレミスCRM の場合、追加で認証メソッドを選択します。
デフォルトで、本製品 は、Windows(NTLM)認証を使います。Kerberos delegation などの他の認証タイプを使うには、AuthScheme を設定します。
次は接続文字列の例です。
AuthScheme=Auto;Url=https://myOrg.crm.dynamics.com/;User=username;Password=password;CRM Version='CRM2011+'"
Internet Facing Deployments
IFD を使用するDynamics CRM では、InternetFacingDeployment をtrue に設定します。
次は接続文字列の例です。
AuthScheme=Auto;Url=https://myOrg.crm.dynamics.com/;User=username;Password=password;InternetFacingDeployment=True;CRM Version='CRM2011+'"
AzureAD
Microsoft Dynamics CRM はAzureAD をサポートしています。AzureAD を使用して認証するには、カスタムアプリを作成してOAuthClientId、OAuthClientSecret を取得し、カスタムのAzureAD 資格情報を使用する必要があります。これらのプロパティに加えて、CallbackURL を設定します。
OAuth 認証スキームを強制するためには、AuthScheme をOAuth に設定します。
OAuth アプリケーション作成後、次の接続プロパティを設定します。
- AuthScheme:OAuth に設定。
- OAuthClientId:アプリケーション設定のコンシューマーキーに設定。
- OAuthClientSecret(オプション):アプリケーション設定のコンシューマーシークレットに設定。
- ADFSServer:デプロイメントのADFS に設定。
接続すると、本製品 はデフォルトブラウザでAzureAD エンドポイントを開きます。ログインして、アプリケーションにアクセス許可を与えます。本製品 が以下のAzureAD プロセスを完了します。
- コールバックURL でアクセストークンおよびADFSServer を設定し、認証リクエストを行います。
- 接続設定にOAuth 値を保存します。これらの値は接続間で永続化されます。
- 返されたリフレッシュトークンと有効なアクセストークンとを交換します。
AuthScheme=OAuth;Url=https://myOrg.crm.dynamics.com/;CRM Version=CRM2011+;InitiateOAuth=GETANDREFRESH;CallbackUrl=http://localhost:33333;OAuthClientId=ClientID;ADFSServer=https://auth.adfs.com/;"次はオンライン環境用の接続文字列の例です。
AuthScheme=OAuth;Url=https://myOrg.crm.dynamics.com/;CRM Version=CRMOnline;InitiateOAuth=GETANDREFRESH;CallbackUrl=http://localhost:33333;OAuthClientId=ClientID;AzureTenant=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;"
Kerberos
Kerberos で認証する方法についての詳細は、Kerberos の使用 を参照してください。
データの取得
Select-DynamicsCRM cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-DynamicsCRM -Connection $conn -Table "Lead" -Columns @("Id, FirstName") -Where "FirstName='Bob'"
Invoke-DynamicsCRM cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-DynamicsCRM -Connection $conn -Table Lead -Where "FirstName <> 'Bob'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\myLeadData.csv -NoTypeInformation
Select-DynamicsCRM からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = Connect-DynamicsCRM -CRMVersion "CRM2011+" -Url "http://MySite/MyOrganization" -User "MyUser" -Password "MyPassword"
PS C:\> $row = Select-DynamicsCRM -Connection $conn -Table "Lead" -Columns (Id, FirstName) -Where "FirstName <> 'Bob'" | select -first 1
PS C:\> $row | ConvertTo-Json
{
"Connection": {
},
"Table": "Lead",
"Columns": [
],
"Id": "MyId",
"FirstName": "MyFirstName"
}
データの削除
以下は、抽出条件に合うあらゆるレコードを削除します。
Select-DynamicsCRM -Connection $conn -Table Lead -Where "FirstName = 'Bob'" | Remove-DynamicsCRM
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをMicrosoft Dynamics CRM にロードします。
Import-Csv -Path C:\MyLeadUpdates.csv | %{
$record = Select-DynamicsCRM -Connection $conn -Table Lead -Where ("Id = `'"+$_.Id+"`'")
if($record){
Update-DynamicsCRM -Connection $conn -Table Lead -Columns @("Id","FirstName") -Values @($_.Id, $_.FirstName) -Where "Id = `'$_.Id`'"
}else{
Add-DynamicsCRM -Connection $conn -Table Lead -Columns @("Id","FirstName") -Values @($_.Id, $_.FirstName)
}
}