Dynamics CRM 2011 PowerShell で高度な構成設定を変更する

みなさん、こんにちは。

東京は梅雨もあけ、本格的に暑くなってきましたがいかがお過ごしでしょうか。
今回は管理者向けのトピックとして、PowerShell で Microsoft Dynamics CRM
2011 の高度な構成設定を変更する方法を紹介します。

Microsoft Dynamics CRM 2011 の PowerShell サポートについては以下記事で
紹介していますので、初めての方はまずそちらをご覧ください。

Dynamics CRM 2011 PowerShell 機能紹介

高度な構成設定とは

まずここでいう高度な構成設定とは、Microsoft Dynamics CRM 2011 の構成
データベースに保持される設定のことで、全ての組織に対して影響を及ぼす
ものになります。以下にその種類を紹介します。

CrmKeySetting
各種類のキーに固有のキー設定を格納します。
詳細はこちらを参照してください。

Deployment
展開設定を格納します。
詳細はこちらを参照してください。

Organization
組織のコンテキストの外部で必要な組織データを格納します。
詳細はこちらを参照してください。

OrganizationFeatureMap
有効になっている機能の一覧を格納します。

ServerSettings
Microsoft Dynamics CRM サーバーのサーバー設定を格納します。
詳細はこちらを参照してください。

高度な設定の取得

設定の取得は Get-CrmAdvancedSetting コマンドを使用します。
例えば Deployment の AggregateQueryRecordLimit を取得する場合は
以下のコマンドを実行します。

Get-CrmAdvancedSetting -ConfigurationEntityName Deployment -Setting AggregateQueryRecordLimit

しかしこのままでは出力が見づらいため、最後に | fl を付けると以下のような
結果が返ってきます。

image

この場合 AggregateQueryRecordLimit の値が既定値の 50000 であることがわかります。

高度な設定の変更

高度な設定の変更には Set-CrmAdvancedSetting コマンドを利用します。
ただし Get-CrmAdvancedSetting の結果を渡すことができないため、設定を
作成してから渡すことになります。以下は AggregateQueryRecordLimit を 100000 に
変更する例です。

Add-PSSnapin Microsoft.Crm.PowerShell
# まず設定を保持するオブジェクトを作成
$setting = New-Object "Microsoft.Xrm.Sdk.Deployment.ConfigurationEntity"
# 設定したいテーブルを設定
$setting.LogicalName = "Deployment"
# 設定したい項目を保持するためのオブジェクトを作成
$setting.Attributes = New-Object "Microsoft.Xrm.Sdk.Deployment.AttributeCollection"
# 上記オブジェクトに渡すデクショナリオブジェクトを作成
# 項目名と値を指定
$keypair = New-Object "System.Collections.Generic.KeyValuePair[String, Object]" ("AggregateQueryRecordLimit", 100000)
# 項目を設定に追加
$setting.Attributes.Add($keypair)
# 設定を反映
Set-CrmAdvancedSetting -Entity $setting

# 設定が反映されたか確認
Get-CrmAdvancedSetting -ConfigurationEntityName Deployment -Setting AggregateQueryRecordLimit |fl

高度な設定変更のスクリプト

上記のように、高度な設定の変更を行うためにはいくつかのオブジェクトを作成する
必要があり、手間がかかります。そこで SDK ではスクリプトファイルを提供しています。

スクリプトファイルは SampleCode\PS\SetAdvancedSettings.ps1 にあります。以下に
利用例を紹介します。設定は上記と同じ変更を行います。

# スクリプトがあるディレクトリに移動
cd C:\Users\Administrator\Desktop\sdk\samplecode\ps
# スクリプトに引数を渡して実行
setadvancedsettings.ps1 -ConfigurationEntityName Deployment -SettingName AggregateQueryRecordLimit -SettingValue 200000
# 結果の確認
Get-CrmAdvancedSetting -ConfigurationEntityName Deployment -Setting AggregateQueryRecordLimit|fl

またこのスクリプトには Microsoft.Crm.PowerShell を読み込み機能も付いてます。

まとめ

テーブル名や項目名は大文字小文字を識別しますので、実際にコマンドを
実行する際は気を付けてください。設定できる項目と値の範囲等の詳細は
SDK をご確認ください。

PowerShell を利用していろいろな作業を自動化してみてください。

- Dynamics CRM サポート 中村 憲一郎