我正在使用 DISM.exe(部署映像服务和管理工具)重新映像机器。我的老板要求我为这个实用程序创建一个更好看的 UI。我的计划是重新定向 DISM 的输出,解析 dism 显示的“进度条”,以便我可以提取完成百分比,然后将其转换为浮点数以在我自己的 UI 中使用。
在我开始测试之前,这一切似乎进展顺利。DISM 输出如下所示:
Deployment Image Servicing and Management tool
Version: 6.2.9200.16384
Applying Image
[================= 36.7% ]
但是,我的 powershell 脚本没有按应有的方式提取 36.7,因此为了进一步调试,我取出了所有解析代码,这样我的所有代码所做的只是将输出直接重定向到屏幕。
当我这样做并重新运行 dism 时,输出看起来很相似,只是现在根本没有进度条。
所以基本上,dism.exe 的进度条部分似乎没有使用标准打印方法将其回显到屏幕上,因为我的脚本在我使用的 StreamReader.ReadLine() 调用中没有看到进度条得到输出。
有谁知道为什么会这样以及如何更改我的脚本以便它也成功读取进度条?
这是源代码:
write-host "Initializing dism process..."
$processInfo = new-object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = "dism.exe"
$processInfo.UseShellExecute = $false
$processInfo.RedirectStandardOutput = $true
$processInfo.Arguments = "/Apply-Image /ImageFile:C:\images\Win864_SL-IN-837.wim /ApplyDir:D:\ /Index:1"
$process = new-object System.Diagnostics.Process
$process.StartInfo = $processInfo
write-host "Starting up dism..."
$process.Start();
$stream = $process.StandardOutput
$str = ""
if($stream -ne $null){
write-host "Found output stream..."
while($str -ne $null)
{
$str = $stream.ReadLine()
write-host $str
}
}
write-host "Stopping interception..."