如何基于ResourceId获取AzPublicIpAddress?

时间:2019-03-06 02:16:02

标签: azure powershell

部署脚本需要从公共IP前缀枚举现有的公共IP地址。公共IP前缀对象包含单个公共IP地址的资源标识数组。

我想使用提供的资源标识符来检索各个公共IP地址。像这样:

Get-AzPublicIpAddress -ResourceId $resourceId;

不幸的是,这种签名不存在。 Get-AzPublicIpAddress需要IP地址名称作为输入参数。

我知道我可以做到:

  1. 调用Get-AzResource并从返回的对象中获取所需的信息[这意味着需要进行额外的网络调用]
  2. 从资源标识符中解析所需的信息[希望避免在PowerShell中实现此逻辑]

问题-这些是唯一的选择吗?还是Az提供了一种解析资源标识符的内置方法?

2 个答案:

答案 0 :(得分:0)

我认为您不能直接将-ResourceId传递给命令,所有内置参数都在这里:https://docs.microsoft.com/en-us/powershell/module/az.network/get-azpublicipaddress?view=azps-1.4.0。我能找到的最接近的方法是您的选择2。

不确定我们为什么要通过Get-AzPublicIpAddress使用ResourceId,即使我们使用-Name-ResourceGroupNameGet-AzPublicIpAddress -Name <publicIpName> -ResourceGroupName <ResourceGroupName>,它实际上也会将它们传递给rest api which the command called的请求网址。

GET https://management.azure.com/subscriptions/xxxxxxxxx/resourceGroups/joywebapp/providers/Microsoft.Network/publicIPAddresses/joyVM-ip?api-version=2018-10-01

实际上,您会发现/subscriptions/xxxxxxxxx/resourceGroups/joywebapp/providers/Microsoft.Network/publicIPAddresses/joyVM-ipResourceId

因此,我认为Microsoft将-ResourceId添加为Get-AzPublicIpAddress命令的内置参数应该不太困难,如果要改进它,可以提供反馈{ {3}}。

更新

Microsoft已回复此问题,请参阅:here

  

感谢您打开此功能请求-为了更深入地了解您为什么上述问题已被关闭:我们在Az中发布的所有新cmdlet必须符合具有允许用户执行操作的参数集的模式以下:

     

提供资源的组成部分(例如资源组名称,资源名称等)   提供资源的资源ID   提供资源的对象表示形式(某些cmdlet不会使用它,例如Get-*)

     

今年晚些时候,我们将开始使用AutoRest(https://github.com/Azure/azure-powershell/issues/8704#issuecomment-470604852)生成cmdlet,并且将在生成器中强制执行上述模式。然后,我们的目标是为现有的Azure服务生成cmdlet,并用生成的cmdlet替换我们现有的cmdlet。

答案 1 :(得分:0)

  1. 您可以使用Get-AzResource -resourceId xxx -ExpandProperties | fl *进行此类请求。它是适用于任何资源的通用cmdlet。

Get-AzResource相比,给Get-AzPublicIpAddress打电话是一个额外的网络电话吗?它的1次通话和1次通话。

  1. 不,Az不提供任何解析功能,不需要它们。您拥有使用资源ID和单个名称的工具。

从资源ID中获取资源名称非常简单:

$resourceId -split '/' | Select-Object -Last 1