ObjectHandling/Import-TestToolkitToNavContainer.ps1
<#
.Synopsis Import TestToolkit to Nav Container .Description Import the objects from the TestToolkit to the Nav Container. The TestToolkit objects are already in a folder on the NAV on Docker image from version 0.0.4.3 .Parameter containerName Name of the container for which you want to enter a session .Parameter sqlCredential Credentials for the SQL admin user if using NavUserPassword authentication. User will be prompted if not provided .Example Import-TestToolkitToNavContainer -containerName test2 #> function Import-TestToolkitToNavContainer { Param( [Parameter(Mandatory=$true)] [string]$containerName, [System.Management.Automation.PSCredential]$sqlCredential = $null ) $sqlCredential = Get-DefaultSqlCredential -containerName $containerName -sqlCredential $sqlCredential $session = Get-NavContainerSession -containerName $containerName -silent Invoke-Command -Session $session -ScriptBlock { Param([System.Management.Automation.PSCredential]$sqlCredential) $customConfigFile = Join-Path (Get-Item "C:\Program Files\Microsoft Dynamics NAV\*\Service").FullName "CustomSettings.config" [xml]$customConfig = [System.IO.File]::ReadAllText($customConfigFile) $databaseServer = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseServer']").Value $databaseInstance = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseInstance']").Value $databaseName = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseName']").Value $managementServicesPort = $customConfig.SelectSingleNode("//appSettings/add[@key='ManagementServicesPort']").Value if ($databaseInstance) { $databaseServer += "\$databaseInstance" } $enableSymbolLoadingKey = $customConfig.SelectSingleNode("//appSettings/add[@key='EnableSymbolLoadingAtServerStartup']") $params = @{} if ($sqlCredential) { $params = @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } Get-ChildItem -Path "C:\TestToolKit\*.fob" | ForEach-Object { $objectsFile = $_.FullName Write-Host "Importing Objects from $objectsFile (container path)" $databaseServerParameter = $databaseServer if ($enableSymbolLoadingKey -ne $null -and $enableSymbolLoadingKey.Value -eq "True") { # HACK: Parameter insertion... # generatesymbolreference is not supported by Import-NAVApplicationObject yet # insert an extra parameter for the finsql command by splitting the filter property $databaseServerParameter = '",generatesymbolreference=1,ServerName="'+$databaseServer } Import-NAVApplicationObject @params -Path $objectsFile ` -DatabaseName $databaseName ` -DatabaseServer $databaseServerParameter ` -ImportAction Overwrite ` -SynchronizeSchemaChanges No ` -NavServerName localhost ` -NavServerInstance NAV ` -NavServerManagementPort "$managementServicesPort" ` -Confirm:$false } # Sync after all objects hav been imported Sync-NavTenant NAV -Mode ForceSync -Force } -ArgumentList $sqlCredential Write-Host -ForegroundColor Green "TestToolkit successfully imported" } Export-ModuleMember -Function Import-TestToolkitToNavContainer |