【问题标题】:Powershell Get-ChildItem output delayed? [duplicate]Powershell Get-ChildItem 输出延迟? [复制]
【发布时间】:2016-07-26 21:13:08
【问题描述】:

Powershell 版本信息如下:

Name                           Value
----                           -----
PSVersion                      5.0.10586.494
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.494
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

我有以下 powershell 代码:

Write-Host "Step 1..."

$find = "string-to-find"

Get-ChildItem -Path D:\path\path\ -Include *.dat1, *.dat2, *.dat3, *.dat4, -Recurse `
 | Select-String -SimpleMatch $find `
 | Select-Object -Unique Path

Write-Host "Step 2 ..."

输出:

Step 1...

Step 2...

Path
----
D:\path\path\test.dat1

基本上,Get-ChildItem 的输出发生在 AFTER 之后的 Write-Host 语句中 -- 为什么????

鉴于此代码在以前的版本中运行良好 - 应该使用什么正确的输出方法来按执行顺序显示输出?

提前致谢。

仍在尝试使用以下方法使其正常工作:

Get-ChildItem -Path D:\path\path\ -Include *.dat1, *.dat2, *.dat3, *.dat4, -Recurse `
 | Select-String -SimpleMatch $find `
 | Select-Object -Unique Path `
 | ForEach-Object { $_ } | Write-Host

但输出看起来像:

@{Path=D:\path\path\something.dat1}
@{Path=D:\path\path\something.dat1}

我想要的只是列出的完整路径名(就像它在 v5 之前工作一样)。

【问题讨论】:

标签: powershell


【解决方案1】:

老问题,但添加我的答案,因为它是 Google 上的顶级结果之一。

如果你想继续使用 Write-Host,比如说它的着色能力,可以通过显式管道到 Format-Table 来完成。完整的代码是:

Write-Host "Step 1..."

$find = "string-to-find"

Get-ChildItem -Path D:\path\path\ -Include *.dat1, *.dat2, *.dat3, *.dat4, -Recurse `
 | Select-String -SimpleMatch $find `
 | Select-Object -Unique Path `
 | Format-Table

Write-Host "Step 2 ..."

Get-ChildItem(和类似命令),或不以变量\文件结尾的管道,最终通过对Write-Output 的隐式调用输出到控制台。

控制台输出出现乱序是因为 Write-Output 不会同步写入控制台,除非您在 Write-Output 上显式调用 Format-Table。

参考资料:
https://serverfault.com/questions/693549/powershell-write-host-not-synchronous
https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/14925213-bug-console-output-appears-out-of-order

【讨论】:

    【解决方案2】:

    已解决——根据这篇文章将所有“Write-Host”更改为“Write-Output”:jsnover.com/blog/2013/12/07/write-host-considered-harmful

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      相关资源
      最近更新 更多