使用 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
的大部分參數都是選擇性的。
不過,當您管理資源群組內的資源時,您必須提供資源的完整標識碼,或資源群組、資源提供者和資源類型等參數。
當以需要多個名稱的資源為目標時,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 存放庫中找到。
您可以在下列位置找到 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 新增至您的工具組。