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

PowerShell生成VM快照报告并邮件发送脚本报错求助

解决PowerShell生成VM快照报告的HTML格式化语法错误

错误原因

你遇到的语法错误,核心是HTML样式变量$style的连续赋值语句在同一行未用分号分隔,PowerShell无法正确解析连续的赋值操作,从而抛出Unexpected token '$style'错误。

修复方案

推荐使用PowerShell的Here-String定义完整CSS样式,代码更易读且不易出错;也可以给同一行的赋值语句添加分号分隔。以下是两种修复方式:

方式1:使用Here-String(推荐)

直接用多行字符串定义完整的CSS样式,避免拼接错误:

#HTML formatting
$style = @"
<style>
BODY{font-family: Arial; font-size: 10pt;}
TABLE{border: 1px solid red; border-collapse: collapse;}
TH{border: 1px solid; background-color: #4CAF50; color: white; padding: 5px; }
TD{border: 1px solid; padding: 5px; }
</style>
"@
$date = Get-Date -Format "dddd dd/MM/yyyy HH:mm K"

方式2:分号分隔同一行的赋值语句

如果坚持原有的拼接方式,需在每个$style赋值之间添加分号:

#HTML formatting
$style = "BODY{font-family: Arial; font-size: 10pt;}"; $style = $style + "TABLE{border: 1px solid red; border-collapse: collapse;}"; $style = $style + "TH{border: 1px solid; background-color: #4CAF50; color: white; padding: 5px; }"; $style = $style + "TD{border: 1px solid; padding: 5px; }"; $style = $style + ""
$date = Get-Date -Format "dddd dd/MM/yyyy HH:mm K"

完整修复后的脚本

以下是替换$style部分后的完整可运行脚本:

#Variables
$vCenter = "qwe-2019.wer.com"
$vCenterUser = "wer\adm-myuser"
$vCenterPass = "balabala"
$SMTPServer = "***********.com"
$To = "************.com"
$From = "***********.com"

#HTML formatting
$style = @"
<style>
BODY{font-family: Arial; font-size: 10pt;}
TABLE{border: 1px solid red; border-collapse: collapse;}
TH{border: 1px solid; background-color: #4CAF50; color: white; padding: 5px; }
TD{border: 1px solid; padding: 5px; }
</style>
"@
$date = Get-Date -Format "dddd dd/MM/yyyy HH:mm K"

#Connect to vCenter
CLS
Write-Host "Connecting to $vCenter" -ForegroundColor Blue
Connect-VIServer -Server $vCenter -User $vCenterUser -Password $vCenterPass -Force | Out-Null
Write-Host " Connected to $vCenter" -ForegroundColor Green

#Get list of VMs with snapshots
Write-Host "Generating VM snapshot report" -ForegroundColor Blue
$SnapshotReport = Get-vm | Get-Snapshot | Select-Object VM,Description,PowerState,SizeGB | Sort-Object SizeGB | ConvertTo-Html -Head $style | Out-String
Write-Host " Completed" -ForegroundColor Green

#Sending email report
Write-Host "Sending VM snapshot report" -ForegroundColor Blue
$htmlbody = @"
$SnapshotReport
"@
Send-MailMessage -smtpserver $SMTPServer -From $From -To $To -Subject "Snapshot Email Report for $Date" -BodyAsHtml -Body $htmlbody
Write-Host " Completed" -ForegroundColor Green

#Disconnecting vCenter
Disconnect-VIServer -Server $vCenter -Force -Confirm:$false
Write-Host "Disconnected from $vCenter" -ForegroundColor Blue

(注:最后一行的Disconnecting to改为Disconnected from,更符合语义)

验证说明

修复后,PowerShell能正确解析CSS样式的定义,生成带格式的HTML快照报告并发送邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:30:23