共用方式為


使用 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來管理它。

使用 Invoke-AzRestMethod 搭配 GET 作業

下列範例示範如何搭配 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 的大部分參數都是選擇性的。 不過,當您管理資源群組內的資源時,您必須提供資源的完整標識碼,或資源群組、資源提供者和資源類型等參數。

當以需要多個名稱的資源為目標時,ResourceTypeName 參數可以採用多個值。 例如,若要在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 存放庫中找到。

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

使用 Invoke-AzRestMethod 搭配 PATCH 作業

您可以使用 Invoke-AzRestMethod cmdlet 停用 myresourcegroup 資源群組中已存在且名為 myacr 的 ACR 公用存取。

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

$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 檔案 中說明。 publicNetworkAccess 參數的特定定義可以在 容器登錄的 JSON 檔案中找到,適用於 2019-12-01-preview API 版本的

若要只允許從特定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 的比較

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

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

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

另請參閱