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.
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
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
@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