Powershell 获取导出VM的进度输出

Powershell 获取导出VM的进度输出,powershell,hyper-v,Powershell,Hyper V,我最近创建了一个脚本,通过导出一个VM并使用不同的ID和名称导入它,可以从“模板”中创建选定数量的Hyper-V VM 一切进展顺利,但出口需要相当长的时间。有没有办法从导出vm获取进度输出?如果我查看hyper-v命令中心,我会看到我的VM是在启动脚本后导出的,并且它也有一个进度值,因此似乎有一种方法可以获取当前进度 也可以为导入VM提供进度输出,但这并不重要 如果你感兴趣,这是我目前的剧本。我知道硬编码的路径和其他方面不是很好,所以请不要告诉我任何关于代码风格或类似的事情。首先是一个工作脚

我最近创建了一个脚本,通过导出一个VM并使用不同的ID和名称导入它,可以从“模板”中创建选定数量的Hyper-V VM

一切进展顺利,但出口需要相当长的时间。有没有办法从导出vm获取进度输出?如果我查看hyper-v命令中心,我会看到我的VM是在启动脚本后导出的,并且它也有一个进度值,因此似乎有一种方法可以获取当前进度

也可以为导入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."

您可以作为后台作业启动导出(甚至导入),然后记录作业的进度。示例代码:

$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;
}

我现在使用写进度而不是写输出:
write progress-activity“VM wird Exportiert”-status“Fortschritt:”-percentCompelte$ExportJob.progress.PercentComplete
脚本如何知道完成了多少百分比?这是Export VM生产的产品吗?