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

通过 Invoke-AzRestMethod 管理 Azure 资源

Invoke-AzRestMethod 是一个 Azure PowerShell cmdlet,它是在 Az PowerShell 模块版本 4.4.0 中引入的。 通过它,你可使用 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-rest-api-specs GitHub 存储库中找到 Azure 资源提供程序支持的 API 版本。

可在以下位置找到 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 的公共访问。

若要禁用公共网络访问,需要向会更改 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 文件。 有关 publicNetworkAccess 参数的特定定义,可查看 2019-12-01-preview API 版本所对应的容器注册表 JSON 文件

若要仅允许从特定 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。

另请参阅