PowerShell 执行完操作后无法向控制台输出结果该怎么解决?
问题原因
PowerShell 对结构化对象的格式化输出默认存在缓冲机制,你脚本中生成的自定义服务查询结果属于结构化对象,会等待整条执行链路完成后才会统一渲染到控制台。但Read-Host交互语句会优先抢占控制台控制权,导致查询结果直到你按下回车、脚本即将退出前才会短暂输出,随窗口关闭无法查看。
最简解决方案
只需要在你现有脚本的排序逻辑后,加一个管道符连接Out-Host,强制查询结果立刻输出到控制台即可,修改后的完整代码如下:
Get-WmiObject -Class win32_LoadOrderGroupServiceMembers | ForEach-Object { New-Object -TypeName psobject -Property ` @{ "GroupOrder"=([wmi]$_.GroupComponent).GroupOrder "GroupName"=([wmi]$_.GroupComponent).Name "ServiceName"=([wmi]$_.PartComponent).Name "Started"=([wmi]$_.PartComponent).Started } } | Where-Object { $_.started } | Sort-Object -Property grouporder -Descending | Out-Host Read-Host -Prompt "按任意键退出:"
可选方案
你也可以先把查询结果存到变量里,再显式打印变量,效果完全一致:
# 先把结果存到变量 $运行中的服务组查询结果 = Get-WmiObject -Class win32_LoadOrderGroupServiceMembers | ForEach-Object { New-Object -TypeName psobject -Property ` @{ "GroupOrder"=([wmi]$_.GroupComponent).GroupOrder "GroupName"=([wmi]$_.GroupComponent).Name "ServiceName"=([wmi]$_.PartComponent).Name "Started"=([wmi]$_.PartComponent).Started } } | Where-Object { $_.started } | Sort-Object -Property grouporder -Descending # 显式打印结果 $运行中的服务组查询结果 Read-Host -Prompt "按任意键退出:"
额外提示
如果你双击脚本时无法正常运行,弹出记事本或者提示执行权限错误,可以右键点击脚本文件,选择「使用PowerShell运行」即可正常执行。
内容的提问来源于stack exchange,提问作者fmotion1
相关产品推荐
相关产品推荐

