Functions/Public/Invoke-vRARestMethod.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
function Invoke-vRARestMethod { <# .SYNOPSIS Wrapper for Invoke-RestMethod with vRA specifics .DESCRIPTION Wrapper for Invoke-RestMethod with vRA specifics .PARAMETER Method REST Method: GET, POST, PUT or DELETE .PARAMETER URI API URI, e.g. /identity/api/tenants .PARAMETER Body REST Body in JSON format .PARAMETER Headers Optionally supply custom headers .PARAMETER OutFile Save the results to a file .INPUTS System.String Switch .OUTPUTS System.Management.Automation.PSObject .EXAMPLE Invoke-vRARestMethod -Method GET -URI '/identity/api/tenants' .EXAMPLE $JSON = @" { "name" : "Tenant02", "description" : "This is Tenant02", "urlName" : "Tenant02", "contactEmail" : "test.user@tenant02.local", "id" : "Tenant02", "defaultTenant" : false, "password" : "" } "@ Invoke-vRARestMethod -Method PUT -URI '/identity/api/tenants/Tenant02' -Body $JSON #> [CmdletBinding()][OutputType('System.Management.Automation.PSObject')] Param ( [Parameter(Mandatory=$true)] [ValidateSet("GET","POST","PUT","DELETE")] [String]$Method, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [String]$URI, [Parameter(Mandatory=$false)] [ValidateNotNullOrEmpty()] [String]$Body, [Parameter(Mandatory=$false)] [ValidateNotNullOrEmpty()] [System.Collections.IDictionary]$Headers, [Parameter(Mandatory=$false)] [ValidateNotNullOrEmpty()] [String]$OutFile ) # --- Test for existing connection to vRA if (-not $Global:vRAConnection){ throw "vRA Connection variable does not exist. Please run Connect-vRAServer first to create it" } # --- Create Invoke-RestMethod Parameters $FullURI = "$($Global:vRAConnection.Server)$($URI)" if (!$PSBoundParameters.ContainsKey("Headers")){ $Headers = @{ "Accept"="application/json"; "Content-Type" = "application/json"; "Authorization" = "Bearer $($Global:vRAConnection.Token)"; } } try { # --- Set up default parmaeters $Params = @{ Method = $Method Headers = $Headers Uri = $FullURI } if ($PSBoundParameters.ContainsKey("Body")) { $Params.Add("Body", $Body) # --- Log the payload being sent to the server Write-Debug -Message $Body } elseif ($PSBoundParameters.ContainsKey("OutFile")) { $Params.Add("OutFile", $OutFile) } # --- Support for PowerShell Core certificate checking if (!($Global:vRAConnection.SignedCertificates) -and ($PSVersionTable.PSEdition -eq "Core")) { $Params.Add("SkipCertificateCheck", $true); } # --- Invoke native REST method $Response = Invoke-RestMethod @Params } catch { throw } finally { if ($PSVersionTable.PSEdition -eq "Desktop" -or !$PSVersionTable.PSEdition) { # Workaround for bug in Invoke-RestMethod. Thanks to the PowerNSX guys for pointing this one out # https://bitbucket.org/nbradford/powernsx/src $ServicePoint = [System.Net.ServicePointManager]::FindServicePoint($FullURI) $ServicePoint.CloseConnectionGroup("") | Out-Null } } Write-Output $Response } |