Public/Initialize-P1Environments.ps1

function Initialize-P1Environments {
    <#
    .Synopsis
    Initialize PlannerOne environments

    .Description
    Initialize PlannerOne environments

    .Parameter Tenant
    The PlannerOne tenant.

    .Parameter Environments
    The PlannerOne environments list to initialized.

    .Example
    # Initialize all environments in $env array
    Initialize-P1Environments -Tenant PROD -Environments $env"
    #>

    [cmdletbinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string] $Tenant,
        [Parameter(Mandatory=$true)]
        [object] $Environments
    )
    Process
    {

        if (!(Test-Tenant $Tenant)) {
            Write-Warning "Tenant $Tenant does not exist."
            Write-Warning "Operation canceled."
            return;
        }

        $info = Get-P1Tenant $Tenant

        $hostName = $info.ServiceHost
        $servicePort = $info.WebServicePort

        $envNumber = $Environments.Length
        Write-Verbose "Number of environments: $envNumber"
        for($i=0; ($i -le $Environments.Length); $i++)
        {
            if ($Environments[$i].EnabledInErp)
            {
                If ($Environments[$i].EnvironmentId.Kind -eq 2) { $Product = "Project" }
                ElseIf ($Environments[$i].EnvironmentId.Kind -eq 1) { $Product = "Production" }

                $envId = $Environments[$i].EnvironmentId
                $envName = $envId.Name
                $envGroup = $envId.PlanningGroupContainer
                $envKind = $envId.Kind
                $body = @{Name=$envName;PlanningGroupContainer=$envGroup;Kind=$envKind}

                if ($Environments[$i].EnvironmentId.PlanningGroupContainer -ne "") {
                    Write-Section ("Initializing " + $Environments[$i].EnvironmentId.Name + $Environments[$i].EnvironmentId.PlanningGroupContainer + "...")
                } else {
                    Write-Section ("Initializing " + $Environments[$i].EnvironmentId.Name + "...")
                }

                $url = 'http://' + $hostName + ':' + $servicePort + "/Services/configuration$Product/environments/init"
                Write-Verbose "url: $url"
                $serviceUrl = FixUrl $url

                $postBody = $body | ConvertTo-Json -Compress
                Write-Verbose "Body: $postBody"
                Invoke-WebRequest -Uri $serviceUrl -Method POST -Body $postBody -UseBasicParsing -ContentType "application/json;charset=utf-8" | Out-Null

                $progres = 0

                Do
                {
                    Start-Sleep -Milliseconds 1000

                    $urlProgress = 'http://' + $hostName + ':' + $servicePort + "/Services/configuration$Product/progress"
                    $fixedProgress = FixUrl $urlProgress
                    Write-Verbose "Querying progress: $fixedProgress"
                    [int] $progress = (Invoke-WebRequest -Method POST -Body $postBody -Uri $urlProgress -UseBasicParsing -ContentType "application/json;charset=utf-8").Content
                    Write-Verbose $progress
                    if ($progress -ge 0) {
                        Write-Progress -activity "Initializing in Progress" -status "$progress% complete" -percentcomplete $progress
                    }

                } While ($progress -ge 0 -and $progress -le 99)
            }
        }
    }
}