PowerShell中如何让Write-Output等待函数结果就绪后再一同输出
问题原因
PowerShell默认采用流式输出机制,Write-Output输出的字符串对象会被立即发送到输出流渲染,而Get-Process返回的结构化对象、第三方handle命令的输出存在处理/缓冲延迟,因此会出现提示先显示、结果后加载的错位问题。
解决方案
将提示文本和对应查询结果先统一收集,再一次性输出,即可保证两者同步展示。修正后的代码如下:
##Functions # ------------------------------------------------------------------------------------------------------- function show-process($PName){ # 先收集进程查询结果 $processResult = Get-Process -Name $PName | select ProcessName, @{N='Session ID'; E={$_.SI}}, @{N='Process ID'; E={$_.ID}}, Handles # 合并提示与结果后一次性输出 Write-Output @( "The running $PName processes are:" $processResult ) } function show-handles($HPath){ # 先收集句柄查询结果 $handleResult = handle $HPath # 合并提示与结果后一次性输出 Write-Output @( "Handles that have files open in $HPath : " $handleResult ) } # ------------------------------------------------------------------------------------------------------- ##Start # ------------------------------------------------------------------------------------------------------ show-process -PName $CLREXE show-handles -HPath $CLRDIR
补充说明
如果不需要把提示文本纳入标准输出流(即后续不需要把函数输出传递给其他命令处理),也可以直接把Write-Output替换为Write-Host,也能实现顺序同步的效果,但会丢失提示文本的管道传递能力,按需选择即可。
内容的提问来源于stack exchange,提问作者Keeran
相关产品推荐
相关产品推荐

