public/core/Invoke-MtAzureRequest.ps1
|
<# .SYNOPSIS Invoke a REST API request to the Azure Management API. .DESCRIPTION This function allows you to make REST API requests to the Azure Management API. It is a wrapper around the Invoke-AzRest function, providing a simplified interface. .EXAMPLE Invoke-MtAzureRequest -RelativeUri 'subscriptions' .LINK https://maester.dev/docs/commands/Invoke-MtAzureRequest #> function Invoke-MtAzureRequest { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingCmdletAliases', '', Justification = 'Invoke-MtAzureRequest is required')] [CmdletBinding()] param( # Graph endpoint such as "users". [Parameter(Mandatory = $true)] [Alias('Path')] [string] $RelativeUri, # The HTTP method to use. Default is GET. [Parameter(Mandatory = $false)] [ValidateSet('GET', 'POST', 'PATCH', 'DELETE', 'PUT')] [string] $Method = 'GET', # The API version to use. Default is 2024-11-01 [Parameter(Mandatory = $false)] $ApiVersion = '2024-11-01', # Filter parameters to include in the request. E.g. "displayName eq 'John'" [Parameter(Mandatory = $false)] [string] $Filter, # Select parameters to include in the request. E.g. "id,displayName" [Parameter(Mandatory = $false)] [string] $Select, # The body payload for POST/PATCH/PUT requests [Parameter(Mandatory = $false)] [Alias('Body')] [string] $Payload = $null, # Use Microsoft Graph endpoint. Defaults to Azure Resource Manager, if enabled requests will go to Microsoft Graph [Parameter(Mandatory = $false)] [switch] $Graph ) # Build params to be sent to Invoke-AzRest $params = @{ Method = $Method } if ($Payload) { $params['Payload'] = $Payload } if ($Graph) { $baseUri = $((Get-AzContext).Environment.ExtendedProperties.MicrosoftGraphUrl) if ( -not $baseUri) { $baseUri = 'https://graph.microsoft.com' } if ($ApiVersion -ne 'v1.0' -or $ApiVersion -ne 'beta') { $ApiVersion = 'v1.0' } $uriQueryEndpoint = New-Object System.UriBuilder -ArgumentList ([IO.Path]::Combine($baseUri, $ApiVersion, $RelativeUri)) ## Combine query parameters from URI and cmdlet parameters if ($uriQueryEndpoint.Query) { [hashtable] $finalQueryParameters = ConvertFrom-QueryString $uriQueryEndpoint.Query -AsHashtable if ($QueryParameters) { foreach ($ParameterName in $QueryParameters.Keys) { $finalQueryParameters[$ParameterName] = $QueryParameters[$ParameterName] } } } elseif ($QueryParameters) { [hashtable] $finalQueryParameters = $QueryParameters } else { [hashtable] $finalQueryParameters = @{ } } if ($Select) { $finalQueryParameters['$select'] = $Select -join ',' } if ($Filter) { $finalQueryParameters['$filter'] = $Filter } $uriQueryEndpoint.Query = ConvertTo-QueryString $finalQueryParameters $params['Uri'] = $uriQueryEndpoint.Uri } else { $path = $RelativeUri + "?api-version=$ApiVersion" if ($Filter) { $path += '&$Filter=' + $Filter } $params['Path'] = $path } Write-Verbose "Invoking REST method: $Method $($params['Uri'] -or $params['Path'])" Write-Verbose ($params | ConvertTo-Json -Depth 3) $result = Invoke-AzRest @params return $result.Content | ConvertFrom-Json } |