首页 > 解决方案 > 如何匹配 Powershell Azure VM 中的对象

问题描述

我目前正在尝试在 powershell 中匹配一个对象,但得到空白输出,我不知道为什么。任何指导将不胜感激。我正在尝试将 $resourceIDs 与 Get-AzVM 命令匹配。resourceID 和“Get-AzVM.ID”的示例输出如下

/subscriptions/00/resourcegroups/rg-vm1/providers/microsoft.compute/virtualmachines/az-vm1

这是我正在运行的代码,它得到空白输出。将上面的字符串与下面的 Get-AzVM 命令匹配是可行的,但是当我使用变量进行匹配时,会出现空白输出。

$resourceIDs =((Get-AzPolicyState -Filter "ComplianceState eq 'NonCompliant'" | Where-Object {$_.PolicyDefinitionReferenceId -eq "azure backup should be enabled for virtual machines_1"} | Where-Object {$_.SubscriptionId -eq ""}).resourceID)
Get-AzVM | Where-Object{$_.Id -match $resourceIDs}

编辑:通过Get-AzVM | Where-Object{$_.Id -eq $resourceIDs[0]} 作品,现在我将不得不弄清楚如何遍历所有 $resourceIDs

编辑:Get-AzVM | Where-Object{$_.Id -in $resourceIDs}

非常感谢大家!

标签: azurepowershellazure-powershellazure-automation

解决方案


您可以使用Foreach循环,

$resourceIDs =((Get-AzPolicyState -Filter "ComplianceState eq 'NonCompliant'" | Where-Object {$_.PolicyDefinitionReferenceId -eq "azure backup should be enabled for virtual machines_1"} | Where-Object {$_.SubscriptionId -eq ""}).resourceID)

foreach ( $id in $resourceIDs) 

{

Get-AzVM | Where-Object{$_.Id -in $id}

}

推荐阅读