Powershell, Foreach mit Ausnahme - Hyper-V Backup
Hi,
Ich habe ein Powershell script, welches Sämtliche Virtuelle Maschinen vom Hyper-V auf den gespeichert Zustand versetzt dann exportiert und dann wieder startet.
Jetzt soll aber eine VM des pools nicht mitgesichert werden.
Wie kann ich das realisieren?
MfG
Ich habe ein Powershell script, welches Sämtliche Virtuelle Maschinen vom Hyper-V auf den gespeichert Zustand versetzt dann exportiert und dann wieder startet.
$VM_Service = get-wmiobject -namespace root\virtualization Msvm_VirtualSystemManagementService
$ListofVMs = get-wmiobject -namespace root\virtualization Msvm_ComputerSystem -filter "ElementName <> Name"
foreach ($VM in [array] $ListOfVMs)
{
$VMReturnState = $VM.EnabledState
$VMName = $VM.ElementName
if (($VM.EnabledState -eq 2) -or ($VM.EnabledState -eq 32768) -or ($VM.EnabledState -eq 32770))
{
$VM.RequestStateChange(32769)
echo "Saving the state of $VMName"
}
while (!($VM.EnabledState -eq 32769) -and !($VM.EnabledState -eq 3))
{
Start-Sleep(1)
$VM = get-wmiobject -namespace root\virtualization -Query "Select * From Msvm_ComputerSystem Where ElementName='$VMName'"
}
if ([IO.Directory]::Exists("$dest\TmpDir\$VMName"))
{
[IO.Directory]::Delete("$dest\TmpDir\$VMName", $True)
}
echo "Exporting the VM"
$status = $VM_Service.ExportVirtualSystem($VM.__PATH, $True, "$dest\TmpDir")
if ($status.ReturnValue -eq 4096)
{
$job = [Wmi]$status.Job
while (!($job.PercentComplete -eq 100) -and ($job.ErrorCode -eq 0))
{
Start-Sleep(5)
$job = [Wmi]$status.Job
echo $job.PercentComplete
}
}
## Store the files on in a temp directory before moving them to their location and then remove the old files.
if ([IO.Directory]::Exists("$dest\$VMName"))
{
[IO.Directory]::Move("$dest\$VMName", "$dest\$VMName-OldTmpDir")
[IO.Directory]::Move("$dest\TmpDir\$VMName", "$dest\$VMName")
[IO.Directory]::Delete("$dest\$VMName-OldTmpDir", $True)
}
else
{
[IO.Directory]::Move("$dest\TmpDir\$VMName", "$dest\$VMName")
}
echo "Done with $VMName"
$VM.RequestStateChange($VMReturnState)
}
Jetzt soll aber eine VM des pools nicht mitgesichert werden.
Wie kann ich das realisieren?
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166340
Url: https://administrator.de/contentid/166340
Ausgedruckt am: 20.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Hi,
einfach das Array per Schleife in ein anderes kopieren und dabei ne Abfrage rein welche die nicht zu sicherende VM überspringt.
Zeilen aus Arrays können soweit mir bekannt in PS nicht gelöscht werden, nur deren Inhalt auf z.b. NULL gesetzt werden.
Hab mir deinen Code nciht komplett durchgelesen wie es da mit dem Error Handling ausschaut wenn das Array einen ungültigen Wert besitzt...
siehe:
http://www.colorconsole.de/PS_Windows/de/about_arrays.htm
suche nach:
BEARBEITEN EINES ARRAYS
Greatz Daniel.
einfach das Array per Schleife in ein anderes kopieren und dabei ne Abfrage rein welche die nicht zu sicherende VM überspringt.
Zeilen aus Arrays können soweit mir bekannt in PS nicht gelöscht werden, nur deren Inhalt auf z.b. NULL gesetzt werden.
Hab mir deinen Code nciht komplett durchgelesen wie es da mit dem Error Handling ausschaut wenn das Array einen ungültigen Wert besitzt...
siehe:
http://www.colorconsole.de/PS_Windows/de/about_arrays.htm
suche nach:
BEARBEITEN EINES ARRAYS
Greatz Daniel.