在Register-ObjectEvent中使用Format-Table

时间:2015-05-07 19:21:14

标签: powershell csv

我希望在文件更改时以表格格式显示csv文件的最后20行。为了手动执行此操作,我使用了import-csv $FILENAME | select -last 20 | Format-Table - 这是有效的

当我尝试将其置于观察文件更改的事件中时

  $changed = Register-ObjectEvent $watcher "Changed" -Action {
      cls
      write-host "File Changed"
      import-csv $($eventArgs.FullPath) | select -last 20 | Format-Table
  }

写主机线有效,但表从不显示。如果我打破管道,除格式表外,所有步骤都有效。

如何才能以表格格式显示csv文件的最后20行?

编辑: 这是完整的事件对象定义:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $searchPath
$watcher.Filter = $file
$watcher.EnableRaisingEvents = $true

$changed = Register-ObjectEvent $watcher "Changed" -Action {
   cls
   write-host "File Changed"
   import-csv $($eventArgs.FullPath) | select -last 20 | Format-Table
}

1 个答案:

答案 0 :(得分:0)

@Matt的评论指出了我正确的方向。看来,出于某种原因,输出到Out-Host会导致输出显示Out-String或不管道的位置。 功能代码如下:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $searchPath
$watcher.Filter = $file
$watcher.EnableRaisingEvents = $true

$changed = Register-ObjectEvent $watcher "Changed" -Action {
   cls
   write-host "File Changed"
   import-csv $($eventArgs.FullPath) | select -last 20 | Format-Table | Out-Host
}

这实际上是csv文件的尾部。