首页 > 解决方案 > 函数与方法中的命令输出

问题描述

我想在调用应用程序时看到它的“实时”输出。

当我在函数中调用它时,它可以正常工作,就好像我会直接调用它一样。我可以使用 Ctrl+C 取消应用程序,并更新应用程序输出的“进度条”:

function Test()
{
    dism.exe /online /Cleanup-Image /AnalyzeComponentStore
}

Test
[===                        5.5%                           ]

但是,当我在方法中调用它时,没有可见的输出。我可以通过编写来解决这个问题,& dism.exe /online /Cleanup-Image /AnalyzeComponentStore 2>&1 | Write-Host但对于这个例子,它不会更新进度条,而是在有进度更新时写一个新行:

class TestC
{
    Test()
    {
        & dism.exe /online /Cleanup-Image /AnalyzeComponentStore 2>&1 | Write-Host
    }
}

$testC = [TestC]::new()
$testC.Test()
[=                          3.3%                           ]

[===                        5.5%                           ]

我也无法使用 Ctrl+C 取消应用程序,而是只会取消脚本,而被调用的应用程序会在后台继续运行。

对此有解释吗?和一个可行的解决方法?:)

谢谢!

标签: powershell

解决方案


您可以将Start-Processcmdlet 与-NoNewWindow参数一起使用:

Start-Process dism.exe -ArgumentList "/online /Cleanup-Image /AnalyzeComponentStore" -NoNewWindow -Wait

推荐阅读