Dynamics CRM 2014 年春/SP1 SDK の新機能 ソリューション展開ツールとパッケージテンプレート その 4

みなさん、こんにちは。

前回までの記事でソリューション展開ツールの利用方法とパッケージの
作成方法を紹介してきましたが、今回は CUI での展開を紹介します。

PowerShell での展開

開発したパッケージを繰り返し展開する場合、GUI ツールを利用する
のは効率が良くありません。そこで SDK チームはソリューション展開
ツールの PowerShell 版も用意しました。

前提要件

PowerShell 3.0 以降 : 以下コマンドで確認できます。
>$host
PowerShell スクリプトの実行ポリシーが設定されている。管理者権限
で以下コマンドを実行してください。
>Get-ExecutionPolicy
結果が Restricted の場合、以下コマンドで変更してください。
>Set-ExecutionPolicy -ExecutionPolicy AllSignedp>

手順

前提要件を満たしている場合、以下手順でパッケージの展開が可能です。

コマンドレットの登録

1. PowerShell を開きます。

2. 以下コマンドを実行してディレクトを変更します。ここでは SDK を C ドライブ直下に保存したと仮定します。

>cd c:\SDK\Tools\PackageDeployer\PowerShell

3. 以下スクリプトを実行して PowerShell のアセンブリを登録します。
この作業は 1 度だけ行えば、次回以降は不要です。

>.\RegisterXRMTooling.ps1

4. 以下コマンドでスナップインを 2 つ登録します。

>Add-PSSnapin Microsoft.Xrm.Tooling.Connector
>Add-PSSnapin Microsoft.Xrm.Tooling.PackageDeployment

5. 登録が正常に行えたか、以下コマンドで確認できます。

>Get-Help “CRM”

パッケージの展開

コマンドレットの登録が完了したら、以下手順でパッケージを展開
します。

1. まず以下コマンドでパッケージが存在するか確認します。存在する
ことが明らかな場合、この手順はスキップできます。

>Get-CrmPackages –PackageDirectory c:\SDK\Tools\PackageDeployer

以下のように結果が出れば成功です。

image

2. 次に展開先組織に接続します。以下コマンドで認証情報を設定します。
認証情報を聞かれるのでユーザー情報を入力します。

>$Cred = Get-Credential

3. 以下コマンドで接続情報を作成します。以下はアジアの Microsoft
Dynaimcs CRM Online 上の組織にアクセスする例です。

>$CRMConn = Get-CrmConnection -DeploymentRegion APAC –OnlineType Office365 –OrganizationName crm2013training25 -Credential $Cred

以下メッセージが出て検索を行います。
image

設置型に接続する場合は、以下コマンドを利用します。

>$CRMConn = Get-CrmConnection -ServerUrl https://<your_CRM_Server> -OrganizationName <your_Org_Name> -Credential $Cred

他オプションの詳細はこちらをご参照ください。

4. 最後に以下のコマンドでパッケージを展開します。

>PS C:\Users\Administrator> Import-CrmPackage –CrmConnection $CRMConn –PackageDirectory c:\SDK\Tools\PackageDeployer –PackageName DeployerTest.dll –UnpackFilesDirectory c:\UnpackedFiles -Verbose

※ PackageName にはパッケージの dll 名を指定してください。
※ UnpackFilesDirectory は一時作業領域となります。
※ 最後の –Verbose で処理経過の詳細を出すよう指示しています。

処理が実行され、画面に詳細が表示されます。

スクリプト化

上記情報を元に以下のスクリプトを書いてみました。参考まで。

param
(
    #required params
    [string]$Username = $(throw "Username parameter not specified"),
    [string]$Password = $(throw "Password parameter not specified"),
    [string]$DeploymentRegion = $(throw "DeploymentRegion parameter not specified"),
    [string]$OnlineType = $(throw "OnlineType parameter not specified"),
    [string]$OrganizationName = $(throw "OrganizationName parameter not specified"),
    [string]$PackageDirectory = $(throw "PackageDirectory parameter not specified"),
    [string]$PackageName = $(throw "PackageName parameter not specified"),
    [string]$UnpackFilesDirectory = $(throw "UnpackFilesDirectory parameter not specified")
)

$RemoveSnapInWhenDone = $False

if (-not (Get-PSSnapin -Name Microsoft.Xrm.Tooling.Connector -ErrorAction SilentlyContinue))
{
    Add-PSSnapin Microsoft.Xrm.Tooling.Connector
    $RemoveSnapInWhenDone = $True
}

if (-not (Get-PSSnapin -Name Microsoft.Xrm.Tooling.PackageDeployment -ErrorAction SilentlyContinue))
{
    Add-PSSnapin Microsoft.Xrm.Tooling.PackageDeployment
    $RemoveSnapInWhenDone = $True
}

$Cred = New-Object System.Management.Automation.PSCredential $Username, (convertto-securestring  $Password -AsPlainText -Force)

$CRMConn = Get-CrmConnection -DeploymentRegion $DeploymentRegion –OnlineType $OnlineType –OrganizationName $OrganizationName -Credential $Cred

Import-CrmPackage –CrmConnection $CRMConn –PackageDirectory $PackageDirectory –PackageName $PackageName –UnpackFilesDirectory $UnpackFilesDirectory -Verbose

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

まとめ

数回に渡ってソリューション展開ツールとパッケージテンプレートを
紹介してきましたが、いかがだったでしょうか。開発中に繰り返し
ソリューションとデータを展開しないといけない環境では非常に
重宝するツールですので、是非一度お試しください。

- 中村 憲一郎