Hantera Azure-resurser med Invoke-AzRestMethod

Invoke-AzRestMethod är en Azure PowerShell-cmdlet som lanserades i version 4.4.0 av Az PowerShell-modulen. Det gör att du kan göra anpassade HTTP-begäranden till Azure Resource Manager-slutpunkten (ARM) med hjälp av Az-kontexten.

Denna cmdlet är användbar när du vill hantera Azure-tjänster för funktioner som ännu inte är tillgängliga i Az PowerShell-modulen.

Så här använder du Invoke-AzRestMethod

Du kan exempelvis tillåta åtkomst till Azure Container Registry (ACR) endast för vissa nätverk eller neka offentlig åtkomst. Från och med Az PowerShell-modul version 4.5.0 är funktionen är inte tillgänglig än i Az.ContainerRegistry PowerShell-modulen. Men under tiden kan den hanteras med Invoke-AzRestMethod.

Använda Invoke-AzRestMethod med GET-åtgärder

Följande exempel visar hur du använder Invoke-AzRestMethod-cmdleten med en GET-åtgärd:

$getParams = @{
  ResourceGroupName = 'myresourcegroup'
  ResourceProviderName = 'Microsoft.ContainerRegistry'
  ResourceType = 'registries'
  Name = 'myacr'
  ApiVersion = '2019-12-01-preview'
  Method = 'GET'
}
Invoke-AzRestMethod @getParams

För maximal flexibilitet är de flesta av parametrarna för Invoke-AzRestMethod valfria. Men när du hanterar resurser i en resursgrupp måste du ange antingen det fullständiga ID:t för resursen eller parametrarna som resursgrupp, resursprovider och resurstyp.

Parametrarna ResourceType och Name kan ta flera värden när de har resurser som kräver mer än ett namn som mål. Om du till exempel vill ändra en sparad sökning i en Log Analytics-arbetsyta ser parametrarna ut som i följande exempel: -ResourceType @('workspaces', 'savedsearches') -Name @('my-la', 'my-search').

Med hjälp av en mappning som baseras på positionen i matrisen skapar cmdleten följande resurs: Id:'/workspaces/my-la/savedsearches/my-search'.

Med parametern APIVersion kan du använda en specifik API-version, inklusive förhandsversioner. De API-versioner som stöds för Azure Resource-providers finns på GitHub-lagringsplatsen för azure-rest-api-specs.

Du hittar definitionen för 2019-12-01-preview ACR API-versionen på följande plats: azure-rest-api-specs/specification/containerregistry/resource-manager/Microsoft.ContainerRegistry/preview/.

Använda Invoke-AzRestMethod med PATCH-åtgärder

Du kan inaktivera offentlig åtkomst till det befintliga ACR:et med namnet myacr i resursgruppen myresourcegroup med hjälp av cmdleten Invoke-AzRestMethod.

Om du vill inaktivera offentlig nätverksåtkomst måste du göra ett PATCH-anrop till API:et som ändrar värdet för parametern publicNetwokAccess enligt följande exempel:

$patchParams = @{
  ResourceGroupName = 'myresourcegroup'
  Name = 'myacr'
  ResourceProviderName = 'Microsoft.ContainerRegistry'
  ResourceType = 'registries'
  ApiVersion = '2019-12-01-preview'
  Payload = '{ "properties": {
     "publicNetworkAccess": "Disabled"
     } }'
  Method = 'PATCH'
}
Invoke-AzRestMethod @patchParams

Egenskapen Payload är en JSON-sträng som visar sökvägen för den egenskap som ska ändras.

Alla parametrar för detta API beskrivs i filen rest-api-spec som är associerad med detta API. Den specifika definitionen för parametern publicNetworkAccess finns i JSON-filen för containerregistret för 2019-12-01-preview API-versionen.

Om du bara vill tillåta åtkomst till registret från en viss IP-adress måste nyttolasten ändras på det sätt som visas i följande exempel:

$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

Jämförelse med Get-AzResource, New-AzResource och Remove-AzResource

Med *-AzResource-cmdletarna kan du anpassa REST API-anropet till Azure genom att ange resurstypen, API-versionen och de egenskaper som ska uppdateras. Men egenskaperna måste först skapas som ett PSObject. Den här processen lägger till ytterligare en nivå av komplexitet och kan bli komplicerad.

Invoke-AzRestMethod erbjuder ett sätt att hantera Azure-resurser. Som du ser i föregående exempel kan du skapa en JSON-sträng och använda den för att anpassa REST API-anropet utan att behöva förskapa någon PSObjects.

Om du redan är van vid *-AzResource-cmdletarna kan du fortsätta att använda dem. Vi har inga planer på att sluta stödja dem. Med Invoke-AzRestMethodhar vi lagt till en ny cmdlet i verktygslådan.

Se även