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) } } } } |