Private/NavUtil.ps1


function Set-NAVParameters($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-Output "Copy setup file"
    Copy-Item $outputFile -Destination "$srvBinPath\$Tenant\Setup\setup.xml"
    
    $lastPath = (Get-Item -Path ".\" -Verbose).FullName
    
    Write-Output "Execute PlannerOne Manager in setup mode"
    Set-Location "$srvBinPath\$Tenant"
    
    CMD /C "PlannerOneManager.exe /setup"
    
    Set-Location $lastPath
}

function Set-NAVParametersNew($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
    
    if ($Domain -eq "") {
        $Domain = $Env:COMPUTERNAME
    }
    $configuration = @{
        NavServer = $env:COMPUTERNAME;
        NavPort = $SOAPServicesPort;
        NavClientPort = $ClientServicesPort;
        NavServerInstance = $ServerInstance;
        NavServiceDomain = $Domain;
        NavServiceLogin = $Login;
        NavServicePassword = $Password;
    }
    
    $data = $configuration | ConvertTo-Json

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