Большинство задач в Virtual Machine Manager гораздо быстрее выполнять из консоли PowerShell, однако при этом невозможно отслеживать их состояние и прогресс выполнения. Это не очень удобно при выполнении длительных по времени задач, например таких, как миграция или создание виртуальных машин.
Дело в том, что команды в VMM запускаются в фоновом режиме в виде фонового задания (job), соответствено напрямую увидеть процесс выполнения невозможно. Однако большинство командлетов имеют параметр JobVariable, в который можно прописать имя переменной. В эту переменную будет помещено выполняемое задание, и обращаясь к этой переменной можно узнать его состояние.
Для примера создадим небольшой скрипт, который будет создавать виртуальную машину и показывать процесс выполнения. Сначала импортируем модуль VMM:
Import-Module virtualmachinemanager
Затем определяем сервер VMM, хост, на котором будет размещаться ВМ и путь (папку) для размещения ее файлов:
$VMMServer = Get-SCVMMServer ″SRV2″
$VMHost = Get-SCVMHost -ComputerName ″SRV3″
$VMPath = ″E:\VM″
Вводим имя ВМ и шаблон, из которого она будет развернута:
$OSName = Read-Host ″Enter OS name″
$Template = Get-SCVMTemplate -Name $OSName
$VMName = Read-Host ″Enter VM name″
Запускаем создание новой ВМ, указывая переменную JobVariable с именем NewVM:
$CreateVM = New-SCVirtualMachine -Name $VMName -Template $Template -VMHost $VMHost -Path $VMPath -JobVariable ″NewVM″ -RunAsynchronously
И отслеживаем создание ВМ с помощью командлета Write-Progress:
While ($NewVM.status -eq ″Running″)
{
Write-Progress -Activity ″VM creating…″ -Status $NewVM.progress
Start-Sleep -Seconds 5
}
Объединяем все в скрипт, запускаем его и в результате получим примерно такую картину.
Конечно не так наглядно, как из графической оснастки, но достаточно информативно.