如何使用powershell“解析”Azure资源ID对象

ff29svar  于 2022-12-24  发布在  Shell
关注(0)|答案(2)|浏览(127)

我当前正在尝试从Azure策略中提取数据以实现某些自动化:
(Get-AzPolicyState-筛选器"符合性状态等于"不符合""| Where-Object {$. PolicyDefinitionReferenceId-eq "应该为虚拟机_1启用Azure备份"}|位置-对象{$.订阅ID-eq "0000 "}).资源ID
类型名称:系统字符串
输出示例
/订阅/00/资源组/rg-test/提供程序/微软计算/虚拟机/vm-test
/订阅/00/资源组/rg-test2/提供商/微软计算/虚拟机/vm-test2
我很困惑如何将资源组名称和虚拟机名称仅拉入变量数组中。资源组名称始终以/resourcegroups/开头,虚拟机名称始终以/virtualmachines/开头。
如有任何指导,我们将不胜感激。谢谢!

taor4pac

taor4pac1#

如果您只想从resourceID中提取VM名称和groupName,请尝试以下代码:

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

结果:

drkbr07n

drkbr07n2#

更简单:

$resourceID = '/subscriptions/xxxx/resourceGroups/rrrrrrr/providers/aaaa/bbbb/nnnnn'
$cc=Get-AzResource -ResourceId 

$cc.ResourceType
aaaaa/bbbb

$cc.ResourceGroupName
rrrrrr

$cc.Name
nnnnnnn

相关问题