Invoke-AzRestMethod 是一个 Azure PowerShell cmdlet,它是在 Az PowerShell 模块版本 4.4.0 中引入的。 它允许使用 Az 上下文向 Azure 资源管理器(ARM)终结点发出自定义 HTTP 请求。
在 Az PowerShell 模块尚不支持某些功能时,此 cmdlet 对于管理 Azure 服务非常有用。
如何使用 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。
当面向需要多个名称的资源时,ResourceType
和 Name
参数可采用多个值。 例如,若要在 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 操作一起使用
可使用 myacr
cmdlet 禁用对 myresourcegroup
资源组中名为 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 关联的 rest-api-spec 文件中描述了此 API 的所有参数。
有关 publicNetworkAccess 参数的特定定义,可查看 API 版本所对应的2019-12-01-preview
。
若要仅允许从特定 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。