gpt4 book ai didi

powershell - 启动过程中的写入进度 -Wait

转载 作者:行者123 更新时间:2023-12-03 12:35:08 26 4
gpt4 key购买 nike

我正在尝试创建一个安装脚本并在安装过程中显示一个进度条。

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

但是我找不到在安装程序运行时运行进度条的方法。

如果有人有想法...

最佳答案

您可以为进度条使用线程选项,但我不建议这样做。

相反,放弃 -WaitStart-Process ,并使用 -PassThru返回 [System.Diagnostics.Process] object .

这样,您可以检查自己终止的进程。

这很重要,有两个原因,都与进度条实际上并未跟踪安装进度有关:

  • 您希望能够在过程完成后立即中止进度条。
  • 如果碰巧花费的时间超过 10,000 毫秒,您可能希望将进度条重置为 0。
  • 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 .
  • if块检查以查看进程是否已退出;如果是这样,它会结束进度条,然后 break退出循环。

  • 轻微警告: for loop 现在是一个无限循环,只有在进程退出时才会中断。如果过程卡住了,那么循环也卡住了。如果需要,您可以单独为操作计时并处理超时。

    关于powershell - 启动过程中的写入进度 -Wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342705/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com