2015-02-03 2 views
1

Недавно я создал скрипт, который смог создать выбранное количество виртуальных машин Hyper-V из «шаблона», экспортировав одну виртуальную машину и импортировав ее с разными идентификаторами и именами.Получить выход прогресса для Export-VM

Все работает плавно, но экспорт занимает довольно много времени. Есть ли способ получить прогресс от экспорта-vm? Если я посмотрю в гипер-v командный центр, я вижу, что моя виртуальная машина экспортируется после запуска скрипта, и у нее тоже есть значение прогресса, поэтому каким-то образом существует способ получить текущий прогресс ...

Было бы неплохо иметь выход прогресса для импорта-VM тоже, но это не очень важно.


Если вам интересно, вот мой текущий скрипт. Я знаю, что жестко закодированные пути и другие аспекты не очень приятны, поэтому, пожалуйста, не рассказывайте мне ничего о стиле кода или что-то в этом роде. Сначала идет рабочий скрипт, затем приходит хороший код.

param(
[int]$Anzahl = 0, 
[string]$BasisVM = 'Schulung', 
[string]$ExportDir = 'C:\VMConf\Export\', 
[string]$ExportConf = 'Schulung\Virtual Machines\0D444AF2-3E63-4ACF-867E-34440AA99C42.xml', 
[string]$VMDir = 'C:\VMs\', 
[string]$VMNamePrefix = 'Schulung' 
) 

if ($Anzahl -eq 0) { 
    $Anzahl = Read-Host "Bitte Anzahl der benötigten VMs eingeben" 
} 

"`nStarte Export der Vorlage..." 

if (-Not(Test-Path $ExportDir)) { 
    New-Item -ItemType directory -Path $ExportDir | out-null 
} 
Export-VM -Name $BasisVM -Path $ExportDir 

"Abgeschlossen.`n" 

if (Test-Path $VMDir) { 
    $err = $null 
    $i = 1 
    while (-not($err)) { 
     if ($i -gt 1) { 
      "Alte VM Nummer $($i - 1) wurde gelöscht." 
     } 
     Remove-VM -Name $($VMNamePrefix + ("{0:D2}" -f $i)) -Force -ErrorVariable err -ErrorAction SilentlyContinue 
     $i++ 
    } 

    Remove-Item -r $VMDir | out-null 
    New-Item -ItemType directory -Path $VMDir | out-null 
} 

"`n$Anzahl VMs werden erstellt..." 

for ($i=1; $i -le $Anzahl; $i++) { 
"`tErstelle VM Nummer $i..." 

$name = ($VMNamePrefix + ("{0:D2}" -f $i)) 
$path = ($VMDir + $name) 

$VM = Import-VM -Path $($ExportDir + $ExportConf) -VhdDestinationPath $($path + "/Virtual Hard Discs") -VirtualMachinePath $path -Copy -GenerateNewId 
Rename-VM -VM $VM -NewName $name 

"`t$VM Nummer $i wurde erzeugt." 
} 

"Abgeschlossen.`n" 

"Aufräumen..." 
if (Test-Path $ExportDir) { 
    Remove-Item -r $ExportDir | out-null 
} 
"Abgeschlossen." 

ответ

2

Вы можете начать экспорт (и даже импорт) в качестве фонового задания, а затем зарегистрировать ход выполнения задания. Пример кода:

$ExportJob = Export-VM -Name $BasisVM -Path $ExportDir -AsJob; 

while($ExportJob.State -eq "Running" -or $ExportJob.State -eq "NotStarted") 
{ 
    Write-Output ("[Export] " + $($ExportJob.Progress.PercentComplete) + "% complete"); 
    sleep(5); 
} 

if($ExportJob.State -ne "Completed") 
{ 
    Write-Error ("Export Job did not complete: " +$ExportJob.State); 
    throw $ExportJob.Error; 
} 
+2

я в настоящее время используется для записи-прогресса вместо записи-вывода: 'Write-Progress-активности "VM вирда Exportiert" -status "Fortschritt:" -percentCompelte $ ExportJob.Progress.PercentComplete' –

Смежные вопросы