PowerShell脚本中使用Measure-Command无法显示命令输出的解决方法
问题解决:PowerShell计时脚本无法显示命令输出
问题根源
你写的timeSeb.ps1里,$args | Out-Default根本没执行dir -force .smplayer命令——它只是把脚本接收的三个参数(dir、-force、.smplayer)当成字符串输出了。而你在交互式会话里直接写Measure-Command { dir -force .smplayer },才是真正执行了dir命令,所以能看到文件列表。
正确脚本写法
下面两种方案任选:
方案1:实时显示命令输出(计时包含输出耗时)
这个方案和你交互式操作的体验一致,边执行命令边看结果,计时会包含输出到控制台的时间:
Write-Host "执行命令: $($args -join ' ')" # 调用目标命令并直接输出结果到控制台 $executionTime = Measure-Command { & $args[0] $args[1..($args.Count - 1)] | Out-Host } Write-Host "`n执行耗时: $($executionTime.TotalMilliseconds) 毫秒"
方案2:先执行再输出(计时更精准)
这个方案先把命令结果存起来,计时完成后再输出,统计的是纯命令执行时间,不含控制台渲染耗时:
Write-Host "执行命令: $($args -join ' ')" $commandOutput = $null $executionTime = Measure-Command { # 执行命令并保存输出 $commandOutput = & $args[0] $args[1..($args.Count - 1)] } # 输出命令结果 $commandOutput | Out-Default Write-Host "`n执行耗时: $($executionTime.TotalMilliseconds) 毫秒"
关键说明
&是PowerShell的调用运算符,用来执行指定的命令(这里$args[0]就是你传入的dir),后面的$args[1..]是传递给命令的参数。Out-Host会直接把输出发送到控制台,不会被Measure-Command捕获,这是方案1能实时看到结果的原因。
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

