如何使用 powershell “解析” Azure 资源 ID 对象
Posted
技术标签:
【中文标题】如何使用 powershell “解析” Azure 资源 ID 对象【英文标题】:How to "parse" Azure resource id object with powershell 【发布时间】:2021-06-03 14:59:04 【问题描述】:我目前正在尝试从 Azure 策略中提取数据以实现一些自动化:
(Get-AzPolicyState -Filter "ComplianceState eq 'NonCompliant'" | Where-Object $.PolicyDefinitionReferenceId -eq "应为虚拟机_1 启用天蓝色备份" | Where-Object $ .SubscriptionId -eq "0000").ResourceId
类型名称:System.String
示例输出
/subscriptions/00/resourcegroups/rg-test/providers/microsoft.compute/virtualmachines/vm-test
/subscriptions/00/resourcegroups/rg-test2/providers/microsoft.compute/virtualmachines/vm-test2
我对如何将资源组名称和虚拟机名称仅拉入变量数组感到困惑。 资源组名称始终以 /resourcegroups/ 开头,VM 名称始终以 /virtualmachines/ 开头。
任何指导将不胜感激。谢谢!
【问题讨论】:
$rg,$vm= '/subscriptions/00/resourcegroups/rg-test/providers/microsoft.compute/virtualmachines/vm-test' -replace '^.*/resourcegroups/([^/]+)/.*virtualmachines/([^/]+)','$1/$2' -split '/'
怎么样?您的问题解决了吗?
【参考方案1】:
如果您只想从resourceID
中提取您的虚拟机名称和组名,请尝试以下代码:
function parseGroupAndName
param (
[string]$resourceID
)
$array = $resourceID.Split('/')
$indexG = 0..($array.Length -1) | where $array[$_] -eq 'resourcegroups'
$indexV = 0..($array.Length -1) | where $array[$_] -eq 'virtualmachines'
$result = $array.get($indexG+1),$array.get($indexV+1)
return $result
$resourceID = '/subscriptions/00/resourcegroups/rg-test/providers/microsoft.compute/virtualmachines/vm-test'
parseGroupAndName -resourceID $resourceID
结果:
【讨论】:
嘿斯坦利,谢谢!我仍然对如何将其扩展到 Get-AzPolicyState 的输出感到有些困惑,因为它会输出多个资源 ID 字符串。我会使用带有函数的 foreach 循环来实现这一点吗?非常感谢,请原谅我的问题,因为我是 powershell 的新手。 @EG92,是的,如果 Get-AzPolicyState 回复多个字符串,您可以使用 foreach 循环来执行此操作。如果您还有其他问题,请告诉我。如果我的帖子有帮助,请将其标记为答案,谢谢!以上是关于如何使用 powershell “解析” Azure 资源 ID 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何解析csv文件,查找触发器并使用PowerShell拆分成新文件
如何在 C# 中解析 powershell 样式的命令行参数 [重复]
exec:“powershell”:在 Terraform 中运行 local-exec 时在 $PATH 中找不到可执行文件