$Username = "admin" $Password = "default" $NSXManager = "nsx01.gcp.local" $TargetVersion = "6.2.3" ### Create authorization string and store in $head $auth = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Username + ":" + $Password)) $head = @{"Authorization"="Basic $auth"} ##Get total number of edges $Request = "https://$NSXManager/api/4.0/edges" $r = Invoke-WebRequest -Uri ($Request+"?startIndex=0&pageSize=1") -Headers $head -ContentType "application/xml" -ErrorAction:Stop if ($r.StatusCode -eq "200") {Write-Host -BackgroundColor:Black -ForegroundColor:Green Status: Connected to $NSXManager successfully.} $TotalNumberOfEdges = ([xml]$r.content).pagedEdgeList.edgePage.pagingInfo.totalCount ##Get all edges $r = Invoke-WebRequest -Uri ($Request+"?startIndex=0&pageSize="+$TotalNumberOfEdges) -Headers $head -ContentType "application/xml" -ErrorAction:Stop [xml]$rxml = $r.Content $Edges = @() foreach ($EdgeSummary in $rxml.pagedEdgeList.edgePage.edgeSummary) { $n = @{} | select Name, Id, Version $n.Name = $edgeSummary.Name $n.Id = $edgeSummary.objectId $n.Version = $edgeSummary.appliancesSummary.vmVersion $Edges += $n } ##Upgrade all edges foreach ($Edge in $Edges) { if ($Edge.Version -ne $TargetVersion) { ## Upgrade edge Write-Host "Upgrading Edge" $Edge.Name $Uri = "https://$NSXManager/api/4.0/edges"+"/"+$Edge.Id+"?action=upgrade" $r = Invoke-WebRequest -URI $Uri -Method Post -Headers $head -ContentType "application/xml" -Body $sxml.OuterXML -ErrorAction:Stop } } |