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
相关产品推荐
相关产品推荐

