我尝试在安装过程中创建安装脚本并显示进度条。
$localfolder= (Get-Location).path
start-process -FilePath "$localfolder\Installer.exe" -ArgumentList "/silent /accepteula" -Wait
作为我要添加的进度条:
for($i = 0; $i -le 100; $i++)
{
Write-Progress -Activity "Installer" -PercentComplete $i -Status "Installing";
Sleep -Milliseconds 100;
}
但是在安装程序运行时我无法找到运行进度条的方法。
如果有人有想法......
答案 0 :(得分:4)
你可以使用线程选项来处理你的进度条,但我不推荐它。
相反,使用-Wait
放弃Start-Process
,并使用-PassThru
返回[System.Diagnostics.Process]
object。
有了这个,你可以检查你自己已经终止的过程。
这有两个重要原因,两个原因都与您的进度条实际上并未跟踪安装进度有关:
Process
对象有a boolean property called .HasExited
,您可以将其用于此目的。
考虑到所有这些,我会做这样的事情:
$localfolder= (Get-Location).path
$process = Start-Process -FilePath "$localfolder\Installer.exe" -ArgumentList "/silent /accepteula" -PassThru
for($i = 0; $i -le 100; $i = ($i + 1) % 100)
{
Write-Progress -Activity "Installer" -PercentComplete $i -Status "Installing"
Start-Sleep -Milliseconds 100
if ($process.HasExited) {
Write-Progress -Activity "Installer" -Completed
break
}
}
Start-Process
现在使用-PassThru
代替-Wait
,并将流程对象分配给$process
变量。for
循环迭代器使用$i = ($i + 1) % 100
代替$i++
,以便在0
时保持重置为100
。< / LI>
if
块检查进程是否已退出;如果是这样,它会结束进度条,然后break
退出循环。轻微警告:for
循环现在是一个无限循环,只有在进程退出时才会中断。如果进程卡住,循环也是如此。如果您愿意,可以单独计时操作并处理超时。