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

请求协助修正VM快照报告脚本:显示快照创建者及创建日期

解决VM快照报告中获取创建者和创建日期的问题

问题说明

你原本的PowerShell脚本用于生成VM快照报告并邮件发送,想要新增快照创建者用户名和快照创建日期两列,但自行修改的代码显示的是报告生成者的用户名和当前日期,而非快照本身的创建信息。

问题原因

你使用的$env:USERNAME是获取执行脚本的当前用户,Get-Date是获取脚本运行时的日期,这两个值都和快照本身无关。VMware PowerCLI的Get-Snapshot返回的快照对象自带Created(创建日期)和CreatedBy(创建者)属性,直接调用这些属性就能得到正确信息。

修改后的完整脚本

#Variables
$vCenter = "Your VSphere address"
$vCenterUser = "Domain\adm-yourusername"
$vCenterPass = "Your Password"
$Date = Get-Date -Format "yyyy-MM-dd" # 补充定义日期变量,避免邮件主题报错

#HTML样式
$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>
'@

#连接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

#生成快照报告:新增创建者和创建日期列
$SnapshotReport = Get-Vm | Get-Snapshot | Select-Object VM, Description, PowerState, SizeGB,
                  @{Name='创建者用户名';Expression={$_.CreatedBy}},
                  @{Name='创建日期';Expression={$_.Created.ToString("yyyy-MM-dd HH:mm:ss")}} | 
                  Sort-Object SizeGB -Descending | ConvertTo-Html -Head $style | Out-String

#发送邮件报告
Write-Host "Sending VM snapshot report" -ForegroundColor Blue

#使用Splatting方式组织邮件参数,提升可读性
$params = @{
    SmtpServer = "Your SMTP server address"
    From       = "your email address"
    To         = "your email address"
    Subject    = "Snapshot Email Report for $Date"
    Body       = $SnapshotReport
    BodyAsHtml = $true
    # 可添加其他邮件参数,如CC、Attachments等
}
Send-MailMessage @params
Write-Host " Completed" -ForegroundColor Green

#断开vCenter连接,清理会话
Disconnect-VIServer -Server $vCenter -Confirm:$false

关键修改点说明

  • @{Name='创建者用户名';Expression={$_.CreatedBy}}:直接引用快照对象的CreatedBy属性,获取创建该快照的用户账号
  • @{Name='创建日期';Expression={$_.Created.ToString("yyyy-MM-dd HH:mm:ss")}}:调用快照的Created属性,并格式化为清晰的日期时间格式
  • 补充了$Date变量的定义,解决原脚本中邮件主题未定义变量的报错
  • 添加Disconnect-VIServer命令,执行完成后自动断开vCenter连接,避免残留会话占用资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:20