You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取DSC节点关联Azure VM的资源组及资源ID(同名节点场景)

识别Automation DSC节点关联的Azure VM

当遇到同名DSC节点无法通过Get-AzAutomationDscNode直接获取关联VM的情况,可以通过匹配DSC节点的注册ID与VM的DSC扩展属性来定位对应VM,以下是具体的PowerShell实现方法:

步骤1:获取目标DSC节点信息

先筛选出资源组中同名的DSC节点,记录它们的RegistrationId(唯一标识):

# 替换为你的自动化账户名
$automationAccountName = "你的自动化账户名称"
$targetNodeName = "Node1"
$rgName = "resourcegroup1"

# 获取所有同名的DSC节点
$dscNodes = Get-AzAutomationDscNode -ResourceGroupName $rgName -AutomationAccountName $automationAccountName | 
            Where-Object {$_.Name -eq $targetNodeName}

步骤2:通过VM的DSC扩展反向匹配关联VM

DSC节点注册时,对应的VM会安装Microsoft.Powershell.DSC扩展,扩展的公共设置中包含RegistrationId和NodeName,可以通过这些字段关联:

方法一:查询订阅内所有VM(适合范围较小的订阅)

# 获取订阅内所有带DSC扩展的VM信息
$vmDscInfo = Get-AzVM -Status | ForEach-Object {
    $vm = $_
    $dscExtension = $vm.Extensions | Where-Object {$_.VirtualMachineExtensionType -eq "Microsoft.Powershell.DSC"}
    if ($dscExtension) {
        $extensionSettings = $dscExtension.PublicSettings | ConvertFrom-Json
        [PSCustomObject]@{
            VMName = $vm.Name
            VMResourceGroup = $vm.ResourceGroupName
            DscRegistrationId = $extensionSettings.RegistrationId
            DscNodeName = $extensionSettings.NodeName
        }
    }
}

# 匹配DSC节点与VM
foreach ($node in $dscNodes) {
    $matchedVm = $vmDscInfo | Where-Object {
        $_.DscRegistrationId -eq $node.RegistrationId -and $_.DscNodeName -eq $node.Name
    }
    if ($matchedVm) {
        Write-Output "DSC节点 [$($node.Name)](ID: $($node.NodeId))关联VM:$($matchedVm.VMName),所属资源组:$($matchedVm.VMResourceGroup)"
    } else {
        Write-Output "未找到与DSC节点 [$($node.Name)](ID: $($node.NodeId))关联的VM,该节点可能对应已删除的VM"
    }
}

方法二:指定资源组范围查询(提高效率)

如果已知VM可能所在的资源组,可以缩小查询范围:

# 指定可能包含目标VM的资源组列表
$targetResourceGroups = @("resourcegroup1", "resourcegroup2")

$vmDscInfo = $targetResourceGroups | ForEach-Object {
    Get-AzVM -ResourceGroupName $_ -Status | ForEach-Object {
        $vm = $_
        $dscExtension = $vm.Extensions | Where-Object {$_.VirtualMachineExtensionType -eq "Microsoft.Powershell.DSC"}
        if ($dscExtension) {
            $extensionSettings = $dscExtension.PublicSettings | ConvertFrom-Json
            [PSCustomObject]@{
                VMName = $vm.Name
                VMResourceGroup = $vm.ResourceGroupName
                DscRegistrationId = $extensionSettings.RegistrationId
                DscNodeName = $extensionSettings.NodeName
            }
        }
    }
}

# 执行匹配
foreach ($node in $dscNodes) {
    $matchedVm = $vmDscInfo | Where-Object {
        $_.DscRegistrationId -eq $node.RegistrationId -and $_.DscNodeName -eq $node.Name
    }
    if ($matchedVm) {
        Write-Output "DSC节点 [$($node.Name)](ID: $($node.NodeId))关联VM:$($matchedVm.VMName),所属资源组:$($matchedVm.VMResourceGroup)"
    } else {
        Write-Output "未找到与DSC节点 [$($node.Name)](ID: $($node.NodeId))关联的VM,该节点可能对应已删除的VM"
    }
}

补充说明

  • 如果某个DSC节点没有匹配到VM,说明对应的VM可能已被删除,这类节点可以安全清理。
  • 确保你有足够的权限查询目标资源组内的VM信息。

内容的提问来源于stack exchange,提问作者Ayanda ezekiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:02:42