部署脚本需要从公共IP前缀枚举现有的公共IP地址。公共IP前缀对象包含单个公共IP地址的资源标识数组。
我想使用提供的资源标识符来检索各个公共IP地址。像这样:
Get-AzPublicIpAddress -ResourceId $resourceId;
不幸的是,这种签名不存在。 Get-AzPublicIpAddress需要IP地址名称作为输入参数。
我知道我可以做到:
问题-这些是唯一的选择吗?还是Az提供了一种解析资源标识符的内置方法?
答案 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
和-ResourceGroupName
即Get-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-ip
是ResourceId
。
因此,我认为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)
Get-AzResource -resourceId xxx -ExpandProperties | fl *
进行此类请求。它是适用于任何资源的通用cmdlet。与Get-AzResource
相比,给Get-AzPublicIpAddress
打电话是一个额外的网络电话吗?它的1次通话和1次通话。
从资源ID中获取资源名称非常简单:
$resourceId -split '/' | Select-Object -Last 1