powershell 更新时解析日志文件

fla*_*man 2 powershell robocopy text-parsing

我正在运行一个脚本,该脚本镜像两个目录并更新有关两个目录之间发生的情况的日志文件。我想解析此日志文件以获取更新(在脚本运行时),并且我希望这些文件向我发送一封有关已更改内容的电子邮件,例如通知。另外 - 如果可能的话,我不想多次收到有关同一信息的通知?

在阅读了一些在线命令列表后,我不确定如何执行此操作。

太棒了; 实际上,我想要做的就是当一行添加到日志文件时,解析文件以获取更新的行,而不获取任何其他行。

PowerShell 的功能并不是那么强大,因此我们将不胜感激。

Rya*_*ose 5

您可以通过将-Wait参数传递给来让 PowerShell 获取每个新行Get-Content。然后,您可以将其传递到Foreach-Object脚本块中以执行您需要的任何操作。

Get-Content $logfile -Tail 0 -Wait | foreach {
  "Another line was added: " + $_
}
Run Code Online (Sandbox Code Playgroud)

-Tail N参数导致Get-Content仅获取最后 N 行;在这种情况下为零。这会导致它跳过文件中已有的所有内容,并且仅将新添加的行传递到脚本块。

注意:此 cmdlet 将继续运行,直到您使用 Ctrl+C 取消它(或以其他方式停止其 PowerShell 进程),这使得它更适合在交互式提示中使用,而不是在脚本中使用。

  • “-Wait”参数有一些您可能需要注意的陷阱。*<quote>但这需要在 Get-Content 工作之前写入文件以打开、追加、关闭它。如果写入过程永远不会关闭文件,那么它将无法工作,而 tail -f 则不然。</quote>* 摘自[此处](http://stackoverflow.com/a/4427285/52598) (2认同)