定时删除虚拟服务器快照,自动执行VMware快照并删除超过5天的快照

以下是我用于VMWare 工作站的PowerShell功能。您需要研究vmrun命令,以了解有关如何使其适应ESX需求的更多详细信息;这将使你走上正轨。我意识到这不是在利用PowerShellCLI。

function Execute-VMRunCmd{

param(

[Parameter(Mandatory=$true)]

[string]$args = $(Throw "Args parameter is required.")

)

WriteToLog -msg "VMRun Args: $args"

pushd $sourcePath

$pinfo = New-Object System.Diagnostics.ProcessStartInfo

$pinfo.FileName = $vmwareRun

$pinfo.RedirectStandardError = $true

$pinfo.RedirectStandardOutput = $true

$pinfo.UseShellExecute = $false

$pinfo.Arguments = "$args"

$p = New-Object System.Diagnostics.Process

$p.StartInfo = $pinfo

$p.Start() | Out-Null

$p.WaitForExit()

$stdout = $p.StandardOutput.ReadToEnd()

$stderr = $p.StandardError.ReadToEnd()

$procExitCode = [string]$p.ExitCode

popd

WriteToLog -msg "stdout: $stdout, stderr: $stderr, ExitCode: $procExitCode"

return $stdout

}

WriteToLog是我创建的用于处理插入时间戳的日志记录的函数,但它是一个简单的$fullMsg | Out-File -FilePath $logFile -Append -NoClobber调用。

$sourcepath是vmx文件的文件夹路径,对于ESX,您需要修改它。我切换到目录,以便进行一些调用。对于ESX,我怀疑这不是必需的。

$vmwareRun是vmrun可执行文件的路径。

我可以使用上面的命令自动执行vmrun命令。如果您需要评估$stdout之类的输出,我还会返回listsnapshots值

以下是我如何使用此功能的示例。

function Update-Snapshot{

$snapshotName="WeeklyUpdate"

[string]$allSnapshots = Execute-VMRunCmd -args "listSnapshots $fqp_source"

if ($allSnapshots.Contains($snapshotName)){

Start-Sleep -Seconds 60

Execute-VMRunCmd -args "deleteSnapshot $fqp_source $snapshotName"

}

Execute-VMRunCmd -args "snapshot `"$fqp_source`" $snapshotName"

}

请注意,我必须插入任意睡眠命令。出于某种原因,我在尝试删除没有它的快照时遇到host not available错误。我还没弄清楚为什么呢。

阅读VMRun的文档。希望这对你有所帮助。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值