Public/Initialize-P1Environments.ps1

function Initialize-P1Environments {
    <#
    .Synopsis
    Initialize PlannerOne environments
 
    .Description
    Initialize PlannerOne environments
 
    .Parameter Environments
    The PlannerOne environments list to initialized.
 
    .Parameter Tenant
    The PlannerOne tenant.
     
    .Parameter WebPort
    The PlannerOne web application port.
 
    .Parameter WebAppName
    The PlannerOne web application name.
 
    .Example
    # Initialize all environments in $env array
    Initialize-P1Environments -Environments $env -WebPort 80 -WebAppName "PlannerOneDev"
    #>

    [cmdletbinding()]
    param( 
        [Parameter(Mandatory=$true)]
        [object] $Environments,
        [int] $WebPort,
        [string] $Tenant,
        [string] $WebAppName
    )
    Process
    {
    
        if (!(Test-Tenant $Tenant)) {
            Write-Warning "Tenant $Tenant does not exist."
            Write-Warning "Operation canceled."
            return;
        }

        $TenantInfo = Get-P1Tenant $Tenant
        
        if ($WebPort -eq 0) {
            $WebPort = $TenantInfo.SitePort
        }
            
        if (!$WebAppName) {
            $WebAppName = $TenantInfo.WebApplicationName
        }

        $url = "http://localhost:$WebPort/$WebAppName/configure/ConfigurationService.svc/environments/init"

        for($i=0; ($i -le $Environments.Length); $i++)
        {
            if ($Environments[$i].EnabledInErp -and !$Environments[$i].IsInPlannerOne) 
            {
                If ($Environments[$i].EnvironmentId.Kind -eq 2) { $Product = "Project" } 
                ElseIf ($Environments[$i].EnvironmentId.Kind -eq 1) { $Product = "Production" }
                $encapsulate = $Environments[$i].EnvironmentId | ConvertTo-Json -Compress
                $body = @{
                    environmentId = @{JsonValue = $encapsulate};
                    product = $Product;
                }

                Write-Section ("Initializing " + $Environments[$i].EnvironmentId + "...")
                Invoke-RestMethod -Method POST -Body ($body | ConvertTo-Json -Compress) -Uri $url -ContentType "application/json" -UseDefaultCredentials 

                $progres = 0

                Do
                {
                    Start-Sleep -Milliseconds 1000

                    $urlProgress = "http://localhost:$WebPort/$WebAppName/configure/ConfigurationService.svc/progress/" + $Product
                    $progres = Invoke-RestMethod -Method GET -Uri $urlProgress -ContentType "application/json" -UseDefaultCredentials
                    Write-Progress -activity "Initializing in Progress" -status "$progres% Complete:" -percentcomplete $progres
                } While ($progres -le 99)
            }
        }
    }
}