【问题标题】:powershell parse logfile when updated更新时powershell解析日志文件
【发布时间】:2016-10-06 18:47:23
【问题描述】:

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

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

Tldr; 我真正想做的就是当一行添加到日志文件时,解析文件以获取更新的行,而不获取任何其他行。

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

【问题讨论】:

    标签: powershell text-parsing robocopy


    【解决方案1】:

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

    Get-Content $logfile -Tail 0 -Wait | foreach {
      "Another line was added: " + $_
    }
    

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

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

    【讨论】:

    • 非常感谢我一直在寻找这个!我会将电子邮件脚本传递到 foreach 以使其将每一行新行都通过电子邮件发送给自己吗?那么这将通过电子邮件发送每一行,对吗?再次感谢! :)
    • 您可以将命令放在foreach {...} 块中。在该块内,$_ 变量包含添加的完整行。
    • 所以我应该发送电子邮件“$_”?作为身体,作为包含线? :)
    • -Wait 参数有一些您可能需要注意的陷阱。 但这需要写入文件的进程在 Get-Content 工作之前打开、附加、关闭它。如果写入过程从不关闭文件,那么它将无法工作,而 tail -f 则不然。 取自here
    • @flanelman 如果没有看到您输入的确切命令,不知道是什么导致了这些错误。您可能正在使用the wrong foreach
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2016-01-09
    • 1970-01-01
    • 2013-01-30
    • 2013-12-19
    相关资源
    最近更新 更多