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

使用Azure Automation运行Pre/Post patching脚本并获取VM内执行输出咨询

实现方案及问题修复

核心问题说明

  • 现有脚本未捕获Invoke-AzVMRunCommand的返回结果,该命令的执行输出、错误日志全部存储在返回对象的Value属性中,没有对结果做打印处理的话,Automation作业日志自然不会展示执行输出
  • 现有脚本只支持单VM硬编码执行,未适配多VM批量调度逻辑
  • 注意先确认你的Azure Automation账户已安装最新的Az.Accounts、Az.Compute模块,完全卸载所有AzureRM相关模块避免cmdlet冲突

适配多VM批量执行+输出捕获的脚本

# 连接Azure
$ServicePrincipalConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'
Connect-AzAccount -ServicePrincipal `
    -TenantId $ServicePrincipalConnection.TenantId `
    -ApplicationId $ServicePrincipalConnection.ApplicationId `
    -CertificateThumbprint $ServicePrincipalConnection.CertificateThumbprint | Out-Null

# 配置参数:可以按需求调整为按标签/资源组批量获取VM
$targetResourceGroup = "raimundas-rg"
# 示例:获取指定资源组下所有Windows VM,也可以手动指定VM列表 $vmList = @("test-win-vm1","test-win-vm2")
$vmList = Get-AzVM -ResourceGroupName $targetResourceGroup | Where-Object { $_.StorageProfile.OsDisk.OsType -eq "Windows" } | Select-Object -ExpandProperty Name

# 要执行的内部脚本
$ScriptToRun = @"
Get-Service "wuauserv" | Select-Object Name, Status, StartType | ConvertTo-Json
"@
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1 -Force

# 批量遍历VM执行
foreach ($vmName in $vmList) {
    Write-Output "---------- 开始处理VM: $vmName ----------"
    try {
        # 捕获执行结果
        $runResult = Invoke-AzVMRunCommand -ResourceGroupName $targetResourceGroup `
            -Name $vmName `
            -CommandId 'RunPowerShellScript' `
            -ScriptPath ScriptToRun.ps1 `
            -ErrorAction Stop
        
        # 提取标准输出和错误输出
        $stdOutput = $runResult.Value[0].Message
        $stdError = $runResult.Value[1].Message

        Write-Output "执行成功,标准输出:"
        Write-Output $stdOutput
        if ($stdError) {
            Write-Warning "执行警告/错误输出:"
            Write-Warning $stdError
        }
    }
    catch {
        Write-Error "VM $vmName 执行失败,错误信息:$_"
    }
    Write-Output "---------- 结束处理VM: $vmName ----------`n"
}

# 清理临时文件
Remove-Item -Path ScriptToRun.ps1 -Force -ErrorAction SilentlyContinue

输出查看说明

运行完成后,在Azure Automation的作业日志中,输出面板会展示每台VM的执行结果,警告面板会展示脚本在VM内部执行的错误信息,错误面板会展示命令调用层面的失败信息(比如权限不足、VM未开机等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:07