使用 Invoke-AzRestMethod 管理 Azure 資源
Invoke-AzRestMethod 是 Azure PowerShell Cmdlet,在 Az PowerShell 模組 4.4.0 版引進。 其允許您使用 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
進行管理。
搭配 GET 作業使用 Invoke-AzRestMethod
下列範例示範如何搭配 GET 作業使用 Invoke-AzRestMethod
:
$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-rest-api-specs GitHub 存放庫中找到適用於 Azure 資源提供者的支援 API 版本。
您可以在下列位置中找到 2019-12-01-preview
ACR API 版本的定義:azure-rest-api-specs/specification/containerregistry/resource-manager/Microsoft.ContainerRegistry/preview/。
搭配 PATCH 作業使用 Invoke-AzRestMethod
您可以使用 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 檔案中加以說明。
您可以在 2019-12-01-preview
API 版本的容器登錄 JSON 檔案中找到 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 的比較
*-AzResource
Cmdlet 可讓您藉由指定資源類型、API 版本和要更新的屬性,自訂對 Azure 的 REST API 呼叫。 不過,您必須先將屬性建立為 PSObject
。 此程序會使複雜度提高一層,而且可以變得很複雜。
Invoke-AzRestMethod
提供 Azure 資源的管理方式。 如先前範例所示,您可以建置 JSON 字串,並使用該字串來自訂 REST API 呼叫,而不需要預先建立任何 PSObjects
。
如果已經熟悉 *-AzResource
Cmdlet,則可以繼續使用。 我們尚未打算停止支援。 在 Invoke-AzRestMethod
中,我們已將新的 Cmdlet 新增至您的工具組。