【问题标题】:How to "parse" Azure resource id object with powershell如何使用 powershell “解析” Azure 资源 ID 对象
【发布时间】: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 '/'
  • 怎么样?您的问题解决了吗?

标签: azure powershell


【解决方案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 循环来执行此操作。如果您还有其他问题,请告诉我。如果我的帖子有帮助,请将其标记为答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多