更新时powershell解析日志文件

更新时powershell解析日志文件,powershell,text-parsing,robocopy,Powershell,Text Parsing,Robocopy,我有一个脚本正在运行,它镜像了两个目录,并更新了一个关于这两个目录之间发生了什么的日志文件。我想解析这个日志文件,以便在更新到来时(脚本运行时)获得更新,并希望这些更新向我发送一封电子邮件,说明发生了什么变化,比如通知。另外,如果可能的话,我不想多次收到关于相同信息的通知 在在线阅读了一些命令列表之后,我不确定我将如何进行这项工作 Tldr 实际上,我要做的就是在日志文件中添加一行时,解析该文件以获取更新的行,而不获取任何其他行 PowerShell没有那么强大,因此我们非常感谢您的帮助 通过将

我有一个脚本正在运行,它镜像了两个目录,并更新了一个关于这两个目录之间发生了什么的日志文件。我想解析这个日志文件,以便在更新到来时(脚本运行时)获得更新,并希望这些更新向我发送一封电子邮件,说明发生了什么变化,比如通知。另外,如果可能的话,我不想多次收到关于相同信息的通知

在在线阅读了一些命令列表之后,我不确定我将如何进行这项工作

Tldr 实际上,我要做的就是在日志文件中添加一行时,解析该文件以获取更新的行,而不获取任何其他行


PowerShell没有那么强大,因此我们非常感谢您的帮助

通过将
-Wait
参数传递到
获取内容
,您可以让PowerShell在收到每一行新行时获取它。然后,您可以将其传递到
Foreach对象
scriptblock中,以执行所需的任何操作

Get-Content $logfile -Tail 0 -Wait | foreach {
  "Another line was added: " + $_
}
-Tail N
参数导致
Get Content
仅获取最后N行;在这种情况下是零。这会导致它跳过文件中已经存在的所有内容,只将新添加的行传递给脚本块


注意:此cmdlet将继续运行,直到您使用Ctrl+C取消它(或停止其PowerShell进程),这使得它在交互式提示中使用比在脚本中使用要好得多。

非常感谢,我已经为此寻找了很久了!我会将电子邮件脚本传递到foreach中,让它通过电子邮件将每一行发送给我自己吗?那就在收到每一行的时候给它发电子邮件,对吗?再次感谢!:)您可以将命令放入
foreach{…}
块中。在该块中,
$\u
变量包含添加的完整行。因此我应该发送电子邮件“$\u”?作为主体,作为包含行的主体?:)
-Wait
参数有一些您可能需要注意的缺陷。但这需要写入文件的过程在获取内容之前打开、追加、关闭文件。如果写入过程从未关闭该文件,那么它将无法工作,这与tail-f的情况不同。取自@flanelman,如果没有看到您输入的确切命令,则不知道是什么导致了这些错误。您可能正在使用。