我正在尝试创建一个安装脚本并在安装过程中显示一个进度条。
$localfolder= (Get-Location).path
start-process -FilePath "$localfolder\Installer.exe" -ArgumentList "/silent /accepteula" -Wait
Run Code Online (Sandbox Code Playgroud)
作为进度条,我想添加:
for($i = 0; $i -le 100; $i++)
{
Write-Progress -Activity "Installer" -PercentComplete $i -Status "Installing";
Sleep -Milliseconds 100;
}
Run Code Online (Sandbox Code Playgroud)
但是我找不到在安装程序运行时运行进度条的方法。
如果有人有想法...
您可以为进度条使用线程选项,但我不建议这样做。
相反,放弃-WaitwithStart-Process和 use-PassThru返回一个[System.Diagnostics.Process]object。
这样,您可以检查自己终止的进程。
这很重要,原因有二,都与进度条实际上并未跟踪安装进度有关:
该Process对象有一个布尔属性.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
}
}
Run Code Online (Sandbox Code Playgroud)
Start-Process现在使用-PassThru代替-Wait并将流程对象分配给$process变量。for循环的迭代器使用$i = ($i + 1) % 100,而不是$i++,所以它不断重置0当它到达100。if块检查进程是否已经退出;如果是这样,它会结束进度条,然后break退出循环。轻微警告:for循环现在是一个无限循环,只有在进程退出时才会中断。如果过程卡住了,那么循环也卡住了。如果需要,您可以单独为操作计时并处理超时。
| 归档时间: |
|
| 查看次数: |
4813 次 |
| 最近记录: |