Dynamics CRM 2011 PowerShell 機能紹介

みなさん、こんにちは。

今週からまた一段と冷え込み、冬より寒い状況になりつつあります。早く春が来ることを
ただ祈るばかりです。みなさんも体調を崩されないよう、十分に気をつけてくださいね。

さて今日は、Dynamics CRM 2011 設置型で提供される PowerShell 対応機能を紹介します。

Powershell で行える操作は、基本的に展開マネージャーで行える操作および CRM サーバー
の管理に関する操作です。では早速機能を紹介していきます。

準備

1. PowerShell は、CRM サーバー上での実行のみサポートされています。アドミン権限の
アカウントでログインを行ってください。

2. PowerShell を起動します。既定ではタスクバーにショートカットがありますが、ない場合は
スタートボタンから起動してください。
image

3. Microsoft.Crm.PowerShell スナップインを読み込みます。
image
これで準備は完了です。

コマンド一覧

対応しているコマンドは SDK で確認できますが、PowerShell から実行できるコマンドで
ある程度の情報を取得することが可能です。ここではそれらを紹介します。

Get-Command
このコマンドは、対応しているコマンドの一覧を取得できます。また名前を渡せるので、今回は
以下のようなコマンドを入れてみました。これでコマンド名に CRM が含まれる一覧を取得できます。

image

Get-Help
このコマンドは、引数として渡したコマンドのヘルプを参照可能です。
image

またコマンドを完全に記憶していない場合や、全部タイピングしたくない場合には、ある程度
コマンドを入力後、Tab キーを押下することで残りの部分が自動で入力されます。連続して
押下すれば、次のコマンドが表示されていきますので、便利です。

トレースの有効化

前置きは終わりにして、早速コマンドを実行してみましょう。まずは管理者がよく行う作業として
トレースの設定確認および、変更を行ってみます。

1. Get-CrmSetting コマンドを実行します。

image

2. 必須項目が入力されていないため、パラメーターを要求されます。今回はトレースの
設定を取得したいので、TraceSettings と入力して Enter を押下します。

image
パラメーターが必要と事前に分かっている場合には、引数として渡せます。

3. 現在の設定はトレースが無効です。そこで出力先、カテゴリーを変更して、トレースを
有効にしたいと思います。そのためには、まずこの設定を変数に代入します。
変数は自由に名前をつけれますが、ここでは $setting とします。

image
内容を確認するには、そのまま変数名をコマンドとして入力します。

image

4. パラメータは以下のように変更が可能です。

image

5. 変更した設定を CRM サーバーに戻します。

image

6. 変更を戻した瞬間から設定が有効になります。ディレクトリを確認すると、ログが出力されて
いるのが分かります。

image

7. 無効にする場合は、再度変数に設定を取得して、以下のように Enabled を変更します。

image

組織の作成

では次に組織の作成のサンプルを紹介します。PowerShell は裏側で展開 Web サービスを
利用しています。展開 Web サービスでは、時間のかかる処理は非同期で処理するように
設計されていますので、組織の作成は非同期で処理がされます。その意味を含めてコマンドを
紹介します。

1. PowerShell の準備をします。

2. New-CrmOrganization コマンドを実行します。細かく設定を制御した場合には、事前に
Get-Help コマンド等を利用して、パラメーターを調べてください。今回は必須項目のみ入力します。
image

3. GUID が返ってきます。ただし非同期処理のため、この時点では組織作成のタスクが作成
されただけで、実際の組織作成は完了していません。組織の情報を取得してみましょう。

image

上記のとおり、ステータスは Pending で、いくつかの値もまだ反映されていません。これは
展開マネージャーからも同じ状況が確認できます。

image
もう少ししてから再度同じコマンドを実行して組織を取得してみます。

image
いくつかの値は反映されましたが、まだステータスは Pending です。ここが Enabled になれば
作業は完了です。

4. ご覧の通り、ここの環境は英語がベースの CRM サーバーです。ただし日本語の MUI がインストール
されているので、日本語ベースの組織を作成可能です。その場合は、パラメーターを渡して作成をします。

image

このパラメータで作成される組織は以下のようなものです。

image

表示の問題で通貨の名称が?になっていますが、実際はちゃんと円になっています。

image

このようにパラメーターを指定することで、より細かな制御が可能となります。

バッチ化

最後にバッチ化の紹介です。毎回 PowerShell を開いてコマンドを入力したくない場合、バッチを作成
することで、再利用が可能です。PowerShell のバッチはメモ帳などで記述できますが、PowerShell 2.0
に含まれる PowerShell ISE を利用することで、より容易に作成が可能です。

PowerShell ISE

Windows 7 の場合は既定でインストールされていますが、 Windows Server 2008 の場合は
PowerShell 2.0 をダウンロードしてインストールすることで PowerShell ISE を利用できます。
また Windows Server 2008 R2 の場合は、機能から PowerShell ISE の追加が可能です。

https://technet.microsoft.com/ja-jp/library/dd759217.aspx

1. PowerShell ISE を起動します。

2. 一番上のウィンドウに以下の記述を追加します。これでバッチ起動時に Microsoft.Crm.PowerShell
を確認して、なければ追加します。

if (-not (Get-PSSnapin -Name Microsoft.Crm.PowerShell -ErrorAction SilentlyContinue))
{
    Add-PSSnapin Microsoft.Crm.PowerShell
    $RemoveSnapInWhenDone = $True
}

3. 次に実際のコマンドを含めます。

$setting = Get-CrmSetting TraceSettings
$setting.Enabled = $True
Set-CrmSetting $setting

4. 必要に応じて出力を行います。

"CRM Trace has been enabled!"

5. 最後にスナップインをアンロードします。

if($RemoveSnapInWhenDone)
{
    Remove-PSSnapin Microsoft.Crm.PowerShell
}

6. ファイル名をつけて保存します。作成したバッチの全容は以下の通りです。

image

7. 保存したファイルを右クリックして、PowerShell で実行すればバッチが実行されます。

※PowerShell は、ポリシーを利用して署名したファイルしか実行しない等の制限を行えます。
もし作成したバッチが実行できない場合には、一時的には以下のコマンドでバッチ実行を
許可すれば実行できますが、詳細を確認して環境にあったポリシーを適用してください。

image

サンプル

SDK 内に、PowerShell のサンプルが提供されています。SDK をダウンロード後、以下の
フォルダを参照してください。

sdk\samplecode\ps 

さて、今回は要望があった PowerShell に関して機能を紹介しました。実際 PowerShell は
もっと複雑でプログラム的なことが実行できる、非常に強力なツールです。自動処理が必要な場合には、
是非いろいろ試してみてください。 

参考リンク:
Windows PowerShell コマンドレットのタスク別ガイド
https://technet.microsoft.com/ja-jp/scriptcenter/dd772285.aspx

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