首页 > 解决方案 > 如何使用 powershell “解析” Azure 资源 ID 对象

问题描述

我目前正在尝试从 Azure 策略中提取数据以实现一些自动化:

(Get-AzPolicyState -Filter "ComplianceState eq 'NonCompliant'" | Where-Object {$ .PolicyDefinitionReferenceId -eq "azure backup should be enabled for virtual machines_1"} | Where-Object {$ .SubscriptionId -eq "0000"})。资源 ID

类型名称: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/ 开头。

任何指导将不胜感激。谢谢!

标签: azurepowershell

解决方案


如果您只想从中提取 VM 名称和 groupName 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

结果: 在此处输入图像描述


推荐阅读