我正在使用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的进度条部分没有使用标准的print方法将它回显到屏幕,因为我的脚本没有看到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..."