如何使用 Get-AzVM 输出订阅名称

How to output Subscription name with Get-AzVM

我目前正在尝试输出不符合策略的 VM 列表,一切正常,除了我不知道如何输出 VM 所在的订阅,因为它不是 属性获取 AzVm。如果有人可以帮助我,我很尴尬我无法弄清楚,因为它看起来很简单。当前输出将使用所有 VM 的最后一个订阅上下文,即使我有多个订阅也是如此。非常感谢!

$vmsNotBackedUp = @()
$vms_results = @()
$subscriptions = Get-AzSubscription

#set policy definition
$poldef = '013e242c-8828-4970-87b3-ab247555486d'


#Get VMs resource ID that are not backed up from Azure Policy, store in $resourceIDs variable

foreach ($sub in $subscriptions) {
Set-AzContext -Subscription $sub.Id



$resourceIDs =(Get-AzPolicyState -Filter "PolicyDefinitionName eq '$poldef' and ComplianceState eq 'NonCompliant'").ResourceId
$vmsNotBackedUp += Get-AzVM | Where-Object{$_.Id -in $resourceIDs}
$currentContext = $sub.Name
$currentContext
}


Write-Output("The Following VMs were not able to be backed up, may need investigation")

#$vmsNotBackedUp|Select-Object -Property Name,ResourceGroupName,Location

foreach ($vm in $vmsNotBackedUp) {
    $output_data = [PSCustomObject]@{
        vmName = $vm.Name
        ResourceGroup = $vm.ResourceGroupName
        vmLocation = $vm.Location
        vmOS = $vm.StorageProfile.OsDisk.OsType
        vmSub = $currentContext
        
    }
    $vms_results += $output_data
}


由于您已经在 $sub.Id 中拥有订阅 ID,您可以将其作为 属性 添加到您在脚本中枚举的 VM。像这样:

$vmsNotBackedUp += Get-AzVM |
    Where-Object{$_.Id -in $resourceIDs} |
    Add-Member -MemberType NoteProperty -Name 'Subscription' -Value $sub.id -PassThru