ImportCMData.ps1

#
# ImportCMData.ps1
#

[CmdletBinding()]

param(
[string]$crmConnectionString, #The target CRM organization connection string
[int]$crmConnectionTimeout = 2, #CRM Connection Timeout in minutes
[string]$dataFile, #The absolute path of data zip to import
[string]$logsDirectory, #Optional - will place the import log in here
[string]$configurationMigrationModulePath, #The full path to the Configuration Migration PowerShell Module
[string]$toolingConnectorModulePath, #The full path to the Tooling Connector PowerShell Module
[int]$concurrentThreads, #Set the number of concurrent threads
[string]$userMapFile, #User mapping file xml for on-premise deployments
[bool]$enabledBatchMode, #Instructs CMT to import into CDS using batches
[int]$batchSize = 600 #Batch size
) 

$ErrorActionPreference = "Stop"
$InformationPreference = "Continue"

Write-Verbose 'Entering ImportCMData.ps1'

#Print Parameters

Write-Verbose "crmConnectionTimeout = $crmConnectionTimeout"
Write-Verbose "dataFile = $dataFile"
Write-Verbose "logsDirectory = $logsDirectory"
Write-Verbose "concurrentThreads = $concurrentThreads"
Write-Verbose "configurationMigrationModulePath = $configurationMigrationModulePath"
Write-Verbose "toolingConnectorModulePath = $toolingConnectorModulePath"
Write-Verbose "userMapFile = $userMapFile"
Write-Verbose "enabledBatchMode = $enabledBatchMode"
Write-Verbose "batchSize = $batchSize"

#Script Location
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Write-Verbose "Script Path: $scriptPath"

#Load PS Module
Write-Verbose "Importing Configuration Migration: $PowerAppsCheckerPath"
Import-module "$ConfigurationMigrationModulePath\Microsoft.Xrm.Tooling.ConfigurationMigration.psd1"

Write-Verbose "Import Tooling Connector: $ToolingConnectorModulePath"
Import-module "$ToolingConnectorModulePath\Microsoft.Xrm.Tooling.CrmConnector.PowerShell.dll"

$connectParams = @{
    ConnectionString = "$CrmConnectionString"
}
if ($crmConnectionTimeout -ne 0)
{
    $connectParams.MaxCrmConnectionTimeOutMinutes = $crmConnectionTimeout
}

if ($logsDirectory)
{
    $connectParams.LogWriteDirectory = "$logsDirectory"
}

$CRMConn = Get-CrmConnection @connectParams -Verbose

$importParams = @{
    CrmConnection = $CRMConn
    DataFile = "$dataFile"
}
If ($logsDirectory)
{
    $importParams.LogWriteDirectory = "$logsDirectory"
}
if ($concurrentThreads -ne 0)
{
    $importParams.ConcurrentThreads = $concurrentThreads
}
if ($userMapFile)
{
    $importParams.UserMapFile = "$userMapFile"
}
if ($enabledBatchMode)
{
    $importParams.EnabledBatchMode = $enabledBatchMode
    $importParams.BatchSize = $batchSize
}

Import-CrmDataFile @importParams -EmitLogToConsole -Verbose

Write-Verbose 'Leaving ImportCMData.ps1'