2017-07-07 9 views
-1

Ich habe 3 VMware exi 6.5-Hosts, auf denen jeweils 4 virtuelle Maschinen ausgeführt werden. In PowerShell mit PowerCLI möchte ich ein Skript, das eine Verbindung zu einem VMware esxi 6.5-Host herstellt, einen Snapshot (mit Ausnahme des Arbeitsspeichers) jeder VM ausführt, Tag und Uhrzeit nennt und dann Snapshots älter als 2 Tage entfernt/konsolidiert . Der Plan ist, das Skript jeden Tag auszuführen, um einen schnellen Rollback-Punkt zu haben, sollte Ransomware den Server infizieren.Automatisieren Sie VMware-Snapshots und entfernen Sie Snapshots, die älter als 5 Tage sind.

Vielen Dank, Ihre Hilfe wird sehr geschätzt.

+1

Das ist eine gute Anwendung für ein Skript. Was hast du bisher und wo steckst du fest? Stack Overflow ist kein Code-Schreibdienst. – alroc

+0

https://serverfault.com/questions/430138/ - "* Ein Snapshot ist kein differenzielles Image, es ist ein Änderungsprotokoll. Wenn Sie also dieselben Daten 10 Mal am selben Ort schreiben, erhöht der Snapshot seine Größe um 10 "multipliziert die Größe der von Ihnen geschriebenen Daten. *" Und "* Dies bedeutet, dass Lesezugriffe nicht nur eine Datei, sondern auch alle Differenzdaten (die Originaldaten plus jede Änderung an den Originaldaten) lesen müssen erhöht sich noch mehr, wenn Sie Schnappschüsse kaskadieren. * ". Diese Idee verlangsamt alle Ihre Server, aber Sie erhalten nichts mehr als eine nächtliche differenzielle Sicherung. – TessellatingHeckler

+0

@alroc, ich bin nicht sicher, wo ich damit anfangen soll, deshalb habe ich es im Stack-Überlauf gepostet, ich habe die Befehle in PowerCLI gesehen, um Snapshots zu machen, bin mir aber nicht sicher, wie man sie von Powershell laufen lässt. – JayXen

Antwort

0

Unten ist eine PowerShell-Funktion, die ich für VMWare Workstation verwenden. Sie müssen den Befehl vmrun recherchieren, um mehr Details zu erfahren, wie Sie ihn an Ihre Bedürfnisse für ESX anpassen können; Das wird dich auf die richtige Spur bringen. Mir ist klar, dass PowerShellCLI nicht genutzt wird.

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 ist eine Funktion, die ich erstellen Protokollierung zu behandeln, die einen Zeitstempel eingefügt, aber es ist ein einfacher $fullMsg | Out-File -FilePath $logFile -Append -NoClobber Anruf.

ist der Ordnerpfad zur vmx-Datei, für ESX müssen Sie dies ändern. Ich wechsle in das Verzeichnis für einige Anrufe um zu arbeiten. Für ESX vermute ich, dass dies nicht erforderlich ist.

$vmwareRun ist der Pfad zu Ihrer ausführbaren Datei von vmrun.

vmrun Kommandozeile Dokumentation finden Sie hier: „https://www.vmware.com/support/developer/vix-api/vix112_vmrun_command.pdf

ich den obigen Befehl verwenden, um den vmrun Befehl zu automatisieren. Ich gebe auch den $stdout Wert für den Fall zurück, dass Sie die Ausgabe von Dingen wie listsnapshots

bewerten müssen. Unten ist ein Beispiel, wie ich diese Funktion verwende.

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" 
} 

Beachten Sie, dass ich einen beliebigen Schlafbefehl einfügen musste. Aus irgendeinem Grund bekam ich host not available Fehler beim Versuch, einen Schnappschuss ohne es zu löschen. Ich habe noch nicht herausgefunden warum.

Lesen Sie die Dokumentation zu VMRun. Hoffentlich ist das hilfreich für Sie.

Verwandte Themen