Private/NavUtil.ps1

function Set-NAVParameters(
    [string]$Tenant,
    [string]$Server,
    [int]$SOAPPort,
    [string]$AuthenticationMode,
    [bool]$SSL,
    [int]$ClientPort,
    [string]$InstanceName,
    [string]$Domain,
    [string]$Login,
    [string]$Password) {
    
    if ($Server -eq "") {
        $Server = $Env:COMPUTERNAME
    }
    
    if ($SOAPPort -eq 0) {
        $SOAPPort = 7047
    }
    
    if ($AuthenticationMode -eq "") {
        $AuthenticationMode = "Negotiate"
        
        if ($Domain -eq "") {
            $Domain = $Env:COMPUTERNAME
        }
    }
    
    if ($ClientPort -eq 0) {
        $ClientPort = -1;
    }
    
    $configuration = @{
        Uid = [System.Guid]::NewGuid();
        Version = 0;        
        Server = $Server;
        Port = $SOAPPort;
        Digest = $false;
        AuthenticationMode = $AuthenticationMode;
        SSL = $SSL;
        ClientPort = $ClientPort;
        InstanceName = $InstanceName;        
        ServiceDomain = $Domain;
        ServiceLogin = $Login;
        UnencryptedServicePassword = $Password;
        SenderBatchSize = 50;
        SynchronizerTimerStep = 3000;
        MapOperationsOnIgnoredResourcesPS = $true;
        MapReservationsPS = $true;
        KeepAlive = $true;
        RetryInitRatio = 5;
        TenantName = "";
        WebServerName = "";
        WebSitePort = 8080;
        MigratedV5 = $false;
        LastModificationDate = [System.DateTime]::UtcNow;
    }
    
    $data = $configuration | ConvertTo-Json

    $storePath = Get-NavPathFromTenant $Tenant
    if (!(Test-Path $storePath)) {
        md $storePath
    }
    
    $storePath = $storePath + "NAV.json"
    [System.IO.File]::WriteAllText($storePath, $data)
    Write-Verbose "NAV configuration stored in $storePath"
}

function Set-NAVParametersOld($Tenant, $Domain, $Login, $Password) {
    $mod = (Get-ChildItem -Path "$env:ProgramFiles\Microsoft Dynamics NAV" -Filter '*.psm1' -Recurse).FullName

    Import-Module $mod

    $xmlConfig = Get-NAVServerInstance | Where-Object Default | Get-NAVServerConfiguration -AsXml

    $values = $xmlConfig.configuration.appSettings.add

    $ServerInstance = ($values | Where-Object key -eq 'ServerInstance').value
    $SOAPServicesPort = ($values | Where-Object key -eq 'SOAPServicesPort').value
    $ClientServicesPort = ($values | Where-Object key -eq 'ClientServicesPort').value
    $DatabaseServer = ($values | Where-Object key -eq 'DatabaseServer').value
    $DatabaseInstance = ($values | Where-Object key -eq 'DatabaseInstance').value
    
    $inputFile = "$PSScriptRoot\setup.xml"
    $outputFile = "$env:HOMEPATH\new-setup.xml"
    
    if ($Domain -eq "") {
        $Domain = $Env:COMPUTERNAME
    }
    
    $XMLfile = New-Object XML

    $XMLfile.Load($inputFile)

    $XMLfile.NavSetupConfiguration.NavServer = $env:COMPUTERNAME
    $XMLfile.NavSetupConfiguration.NavPort = $SOAPServicesPort
    $XMLfile.NavSetupConfiguration.NavClientPort = $ClientServicesPort
    $XMLfile.NavSetupConfiguration.NavServerInstance = $ServerInstance
    $XMLfile.NavSetupConfiguration.NavServiceDomain = $Domain
    $XMLfile.NavSetupConfiguration.NavServiceLogin = $Login
    $XMLfile.NavSetupConfiguration.NavServicePassword = $Password
    $XMLfile.NavSetupConfiguration.P1DbLogin = $Login
    $XMLfile.NavSetupConfiguration.P1DbName = Get-DatabaseNameFromTenant $Tenant
    $XMLfile.NavSetupConfiguration.P1DbPassword = $Password
    $XMLfile.NavSetupConfiguration.P1DbServer = "$DatabaseServer\$DatabaseInstance"
    $XMLfile.NavSetupConfiguration.P1DbServerLogin = $Login
    $XMLfile.NavSetupConfiguration.P1DbServerPassword = $Password
    $XMLfile.NavSetupConfiguration.P1RoleName = $Tenant
    $XMLfile.NavSetupConfiguration.P1WebApplication = Get-WebAppNameFromTenant $Tenant
    $XMLfile.NavSetupConfiguration.P1WindowsServiceName = Get-ServiceNameFromTenant $Tenant
    $XMLfile.NavSetupConfiguration.P1WindowsServiceUserName = "$Domain\$Login"
    $XMLfile.NavSetupConfiguration.P1WindowsServicePassword = $Password
    
    $XMLfile.Save($outputFile)
    
    $srvBinPath = Get-ServicePath

    Write-Verbose "Copy setup file"
    Copy-Item $outputFile -Destination "$srvBinPath\$Tenant\Setup\setup.xml"
    
    $lastPath = (Get-Item -Path ".\" -Verbose).FullName
    
    Write-Verbose "Execute PlannerOne Manager in setup mode"
    Set-Location "$srvBinPath\$Tenant"
    
    CMD /C "PlannerOneManager.exe /setup"
    
    Set-Location $lastPath
}