Share via


使用 Invoke-AzRestMethod 管理 Azure 資源

Invoke-AzRestMethod 是 Az PowerShell 模組 4.4.0 版中引進的 Azure PowerShell Cmdlet。 它可讓您使用 Az 內容對 Azure Resource Manager (ARM) 端點提出自定義 HTTP 要求。

當您想要針對 Az PowerShell 模組中尚未提供的功能管理 Azure 服務時,此 Cmdlet 很有用。

如何使用 Invoke-AzRestMethod

例如,您可以只針對特定網路允許存取 Azure Container Registry (ACR),或拒絕公用存取。 從 Az PowerShell 模組 4.5.0 版起,Az.ContainerRegistry PowerShell 模組尚未提供該功能。 不過,您可以使用 在過渡 Invoke-AzRestMethod期間管理它。

搭配 GET 作業使用 Invoke-AzRestMethod

下列範例示範如何搭配 GET 作業使用 Invoke-AzRestMethod Cmdlet:

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

為了允許最大的彈性,大部分的參數 Invoke-AzRestMethod 都是選擇性的。 不過,當您管理資源群組內的資源時,您必須提供資源的完整標識碼,或資源群組、資源提供者和資源類型等參數。

ResourceType 以需要多個名稱的資源為目標時,和 Name 參數可以採用多個值。 例如,若要在Log Analytics工作區中操作已儲存的搜尋,參數看起來會像下列範例所示: -ResourceType @('workspaces', 'savedsearches') -Name @('my-la', 'my-search')

根據陣列中的位置使用對應,Cmdlet 會建構下列資源: Id:'/workspaces/my-la/savedsearches/my-search'

參數 APIVersion 可讓您使用特定的 API 版本,包括預覽版本。 Azure 資源提供者支援的 API 版本可在 azure-rest-api-specs GitHub 存放庫中找到

您可以在下列位置找到 ACR API 版本的定義 2019-12-01-previewazure-rest-api-specs/specification/containerregistry/resource-manager/Microsoft.ContainerRegistry/preview/

搭配 PATCH 作業使用 Invoke-AzRestMethod

您可以使用 Cmdlet,停用資源群組中名為 myacr 之現有 ACR 的myresourcegroupInvoke-AzRestMethod公用存取。

若要停用公用網路存取,您必須對變更 參數值的 publicNetwokAccess API 進行 PATCH 呼叫,如下列範例所示:

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

屬性 Payload 是 JSON 字串,顯示要修改之屬性的路徑。

此 API 的所有參數都會在與此 API 相關聯的 rest-api-spec 檔案中描述。 您可以在 API 版本的容器登錄 JSON 檔案2019-12-01-preview中找到 publicNetworkAccess 參數的特定定義。

若要只允許從特定IP位址存取登錄,必須修改承載,如下列範例所示:

$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

Get-AzResource、New-AzResource 和 Remove-AzResource 的比較

Cmdlet *-AzResource 可讓您藉由指定資源類型、API 版本和要更新的屬性,來自定義對 Azure 的 REST API 呼叫。 不過,必須先建立屬性做為 PSObject。 此程式會增加額外的複雜度,而且可能會變得複雜。

Invoke-AzRestMethod 提供管理 Azure 資源的方式。 如前一個範例所示,您可以建置 JSON 字串,並用它來自定義 REST API 呼叫,而不需要預先建立任何 PSObjects

如果您已經熟悉 *-AzResource Cmdlet,您可以繼續使用這些 Cmdlet。 我們沒有計劃停止支持他們。 透過 Invoke-AzRestMethod,我們已將新的 Cmdlet 新增至您的工具組。

另請參閱