Manage Azure resources with Invoke-AzRestMethod
Invoke-AzRestMethod is an Azure PowerShell cmdlet that was introduced in Az PowerShell module version 4.4.0. It allows you to make custom HTTP requests to the Azure Resource Manager (ARM) endpoint using the Az context.
This cmdlet is useful when you want to manage Azure services for features that aren't yet available in the Az PowerShell module.
How to use Invoke-AzRestMethod
As an example, you can allow access to Azure Container Registry (ACR) only for specific networks or
deny public access. As of Az PowerShell module version 4.5.0, that feature isn't available yet in
the Az.ContainerRegistry PowerShell module. However, it
can be managed in the interim with Invoke-AzRestMethod
.
Using Invoke-AzRestMethod with GET operations
The following example demonstrates how to use the Invoke-AzRestMethod
cmdlet with a GET operation:
$getParams = @{
ResourceGroupName = 'myresourcegroup'
ResourceProviderName = 'Microsoft.ContainerRegistry'
ResourceType = 'registries'
Name = 'myacr'
ApiVersion = '2019-12-01-preview'
Method = 'GET'
}
Invoke-AzRestMethod @getParams
To allow maximum flexibility, most of the parameters for Invoke-AzRestMethod
are optional.
However, when you're managing resources within a resource group, you'll need to provide either the
full ID to the resource or parameters like resource group, resource provider, and resource type.
The ResourceType
and Name
parameters can take multiple values when targeting resources that
require more than one name. For example, to manipulate a saved search in a Log Analytics workspace,
the parameters look like the following example:
-ResourceType @('workspaces', 'savedsearches') -Name @('my-la', 'my-search')
.
Using a mapping based on the position in the array, the cmdlet constructs the following resource:
Id:'/workspaces/my-la/savedsearches/my-search'
.
The APIVersion
parameter allows you to use a specific API version, including preview ones. The
supported API versions for Azure Resource providers can be found in the
azure-rest-api-specs GitHub repository.
You can find the definition for the 2019-12-01-preview
ACR API version in the following location:
azure-rest-api-specs/specification/containerregistry/resource-manager/Microsoft.ContainerRegistry/preview/.
Using Invoke-AzRestMethod with PATCH operations
You can disable public access to the existing ACR named myacr
in the myresourcegroup
resource
group using the Invoke-AzRestMethod
cmdlet.
To disable the public network access, you need to make a PATCH call to the API that changes the
value of the publicNetwokAccess
parameter as shown in the following example:
$patchParams = @{
ResourceGroupName = 'myresourcegroup'
Name = 'myacr'
ResourceProviderName = 'Microsoft.ContainerRegistry'
ResourceType = 'registries'
ApiVersion = '2019-12-01-preview'
Payload = '{ "properties": {
"publicNetworkAccess": "Disabled"
} }'
Method = 'PATCH'
}
Invoke-AzRestMethod @patchParams
The Payload
property is a JSON string that shows the path of the property to be modified.
All the parameters for this API are described in the rest-api-spec file associated with this API.
The specific definition for the publicNetworkAccess parameter can be found in the
container registry JSON file
for the 2019-12-01-preview
API version.
To only allow access to the registry from a specific IP address, the payload needs to be modified as shown in the following example:
$specificIpParams = @{
ResourceGroupName = 'myresourcegroup'
Name = 'myacr'
ResourceProviderName = 'Microsoft.ContainerRegistry'
ResourceType = 'registries'
ApiVersion = '2019-12-01-preview'
Payload = '{ "properties": {
"networkRuleSet": {
"defaultAction": "Deny",
"ipRules": [ {
"action": "Allow",
"value": "24.22.123.123"
} ]
}
} }'
Method = 'PATCH'
}
Invoke-AzRestMethod @specificIpParams
Comparison to Get-AzResource, New-AzResource, and Remove-AzResource
The *-AzResource
cmdlets allow you to customize the REST API call to Azure by specifying the
resource type, the API version, and the properties to be updated. However, the properties need to be
created first as a PSObject
. This process adds an additional level of complexity and can become
complicated.
Invoke-AzRestMethod
offers a way to manage Azure resources. As shown in the previous example, you
can build a JSON string and use it to customize the REST API call without having to pre-create any
PSObjects
.
If you're already familiar with the *-AzResource
cmdlets, you can continue using them. We've no
plans to stop supporting them. With Invoke-AzRestMethod
, we've added a new cmdlet to your toolkit.