在 PowerShell 中进行静默安装时需要进度条

在 PowerShell 中进行静默安装时需要进度条

在我的工作中,我经常安装和重新安装相同的软件。我在 Powershell 中编写了一个脚本,可以默默地为我安装所有软件,效果很好。但是,由于它是默默的,所以没有反馈,其他使用该程序的人都认为它要么停滞了,要么没有运行。

我正在尝试找到一种方法让它运行静默安装并加载状态栏。我一直在使用以下代码来制作进度条:

for ($i = 1; $i -le 100; $i++ ){write-progress -activity "Search in Progress" -status "$i% Complete:" -percentcomplete $i; Start-Sleep -Milliseconds 10}; .\Untitled11.ps1

但就我而言,我无法让它与安装同时运行。我尝试了许多不同的命令,例如后台启动和并行运行,但状态栏总是在安装之后或之前运行,具体取决于我将其放置在哪里。

关于如何同时运行安装和状态栏,您有什么想法吗?我并不拘泥于状态栏代码,它只是我一直在使用的。因此,如果有更简单的方法或更具适应性的代码,我愿意接受。

答案1

您将无法使用此 cmdlet 查看应用程序安装的实时进度。Write-Progress旨在描述“运行命令或脚本“。此 cmdlet 无法收集安装进度信息。

正如评论中提到的,发出消息来提醒用户脚本的进度可能会更有吸引力。

"This will not detect errors, but give a general sense of completion."

"Running Program A (step 1 of 3)..."
    (run_program_A)
"Program A finished."

"Running Program B (step 2 of 3)..."
    (run_program_B)
"Program B finished."

"Running Program C (step 3 of 3)..."
    (run_program_C)
"Program C finished."

"Finished."

答案2

Write-Progress 无法真正洞察应用程序的安装进度。它只是一个愚蠢的指示器,每次想要更新时,你都必须自己增加它。

如果您在安装过程中生成多个 MSI/EXE 文件,则必须在安装过程的每个步骤后插入一个 Write-Progress。您可以用每个 MSI/EXE 命令行的名称填充一个数组并循环遍历该数组,或者您可以只使用多个使用相同 ID 号的 Write-Progress 语句。

此外,进度条只能在命令执行完毕后增加。如果您将安装外包给另一个脚本,则这将构成一个命令,并且您将无法获得增量进度。您需要将各个组件作为同一脚本的一部分。同样,如果您的安装是一个需要很长时间才能运行的大程序,这也行不通。

答案3

创建将执行此操作的作业。这将启用异步运行而不是同步运行,然后在安装后停止并删除该作业。

相关内容