自动执行VMware快照并删除超过5天的快照

时间:2017-07-07 02:12:49

标签: powershell backup vmware powercli

我有3台VMware exi 6.5主机,每台主机运行4台虚拟机。

在使用PowerCLI的Powershell中,我想要一个连接到VMware esxi 6.5主机的脚本,执行每个VM的快照(不包括内存),将其命名为日期和时间,然后删除/合并超过2天的快照。计划是每天运行脚本,以获得快速回滚点,如果勒索软件感染服务器。

非常感谢,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

以下是我用于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命令行文档可在此处找到:“https://www.vmware.com/support/developer/vix-api/vix112_vmrun_command.pdf

我可以使用上面的命令自动执行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的文档。希望这对你有所帮助。