你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Invoke-AzRestMethod 管理 Azure 资源

Invoke-AzRestMethod 是 Az PowerShell 模块 4.4.0 中引入的 Azure PowerShell cmdlet。 它允许使用 Az 上下文向 Azure 资源管理器(ARM)终结点发出自定义 HTTP 请求。

若要为 Az PowerShell 模块中尚不可用的功能管理 Azure 服务,此 cmdlet 非常有用。

如何使用 Invoke-AzRestMethod

例如,可以仅允许针对特定网络访问 Azure 容器注册表(ACR),或拒绝公共访问。 从 Az PowerShell 模块版本 4.5.0 起,该功能在 Az.ContainerRegistry PowerShell 模块中尚不可用。 但是,它可以在过渡期间进行 Invoke-AzRestMethod管理。

将 Invoke-AzRestMethod 与 GET作配合使用

以下示例演示如何将 Invoke-AzRestMethod cmdlet 与 GET作配合使用:

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

为了允许最大的灵活性,大多数参数 Invoke-AzRestMethod 都是可选的。 但是,在管理资源组中的资源时,需要向资源或参数(如资源组、资源提供程序和资源类型)提供完整 ID。

当面向需要多个名称的资源时,参数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 存储库中找到。

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

将 Invoke-AzRestMethod 与 PATCH作配合使用

可以使用 cmdlet 禁用对资源组myacrmyresourcegroup命名Invoke-AzRestMethod的现有 ACR 的公共访问。

若要禁用公共网络访问,需要对更改参数值的 API 进行 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 文件中描述。 可以在 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,可以继续使用它们。 我们没有计划停止支持他们。 使用 Invoke-AzRestMethod时,我们已将新的 cmdlet 添加到工具包。

另请参阅