BrownField/Networking/VPN-SDWAN/NSX-T/Scripts/Invoke-APIRequest.ps1 (106 lines of code) (raw):

function Convert-SecureStringToPlainText { param ( [System.Security.SecureString]$secureString ) $plainText = [Runtime.InteropServices.Marshal]::PtrToStringAuto( [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString) ) return $plainText } function Get-Base64AuthInfo { param ( [string]$userName, [SecureString]$password ) if ($null -eq $userName) { Write-Error "Username is null" return $null } if ($null -eq $password) { Write-Error "Password is null" return $null } $plainPassword = Convert-SecureStringToPlainText -secureString $password $userName = $userName.Trim() $plainPassword = $plainPassword.Trim() # Encode credentials $base64AuthInfo = [Convert]::ToBase64String( [Text.Encoding]::ASCII.GetBytes("${userName}:${plainPassword}") ) return $base64AuthInfo } function Invoke-APIRequest { param ( [Parameter(Mandatory = $true)] [string]$method, [Parameter(Mandatory = $true)] [string]$url, [string]$token = $null, [string]$body = $null, [string]$avsVcenter = $null, [string]$avsvCenteruserName = $null, [SecureString]$avsvCenterpassword = $null, [string]$vmwareApiSessionId = $null, [string]$avsnsxtUrl = $null, [string]$avsnsxtUserName = $null, [SecureString]$avsnsxtPassword = $null ) try { # Get VMware API session ID if vCenter credentials are provided if ($avsVcenter -and $avsvCenteruserName -and $avsvCenterpassword) { $base64AuthInfo = Get-Base64AuthInfo -userName $avsvCenteruserName -password $avsvCenterpassword if ($null -eq $base64AuthInfo) { return } # Define the vmware-api-session-id API endpoint $sessionUrl = "$avsVcenter/api/session" # Make the API request Write-Host "Making API request to get VMware API session ID..." $sessionResponse = Invoke-RestMethod -Uri $sessionUrl -Method "Post" -Headers @{ Authorization = ("Basic {0}" -f $base64AuthInfo) 'Content-Type' = 'application/json' } -SkipCertificateCheck Write-Host $sessionResponse $vmwareApiSessionId = $sessionResponse.Trim() } # Get NSX-T base64 auth info if NSX-T credentials are provided if ($avsnsxtUrl -and $avsnsxtUserName -and $avsnsxtPassword) { $nsxtbase64AuthInfo = Get-Base64AuthInfo -userName $avsnsxtUserName -password $avsnsxtPassword if ($null -eq $nsxtbase64AuthInfo) { return } } # Prepare headers for the API request $headers = @{} $headers["Content-Type"] = "application/json" # Add Bearer Token to the headers if available for Azure API calls if ($token) { $headers["Authorization"] = "Bearer $token" $headers["User-Agent"] = "pid-94c42d97-a986-4d59-a0e6-6cd5aea77442" } # Add VMware API session ID to the headers if available for vCenter API calls if ($vmwareApiSessionId) { $headers["vmware-api-session-id"] = $vmwareApiSessionId } # Add NSX-T basic auth header if NSX-T URL is provided for NSX-T API calls if ($avsnsxtUrl) { $headers["Authorization"] = ("Basic {0}" -f $nsxtbase64AuthInfo) } # Make the API request if ($method -ieq "GET") { $response = Invoke-RestMethod -Method $method -Uri $url -Headers $headers } elseif ($method -ieq "PATCH") { $response = Invoke-WebRequest -Method $method -Uri $url -Headers $headers -Body $body } else { $response = Invoke-RestMethod -Method $method -Uri $url -Headers $headers -Body $body } #Write-Host "Response Object: $response" return $response } catch { Write-Error "An error occurred: $_" return $null } }