【问题标题】:PS Monitor Log File and update Variable with Latest EntryPS 监控日志文件并使用最新条目更新变量
【发布时间】:2018-01-26 13:58:23
【问题描述】:

我正在尝试监视日志文件的最新条目,然后将输出传递给一个变量,这样我就可以做其他事情了,对于这个例子,我只是要在控制台中弹出一条消息。

$fail = Get-Content 'C:\ProgramData\Software\APP.LOG' -Tail 0 -Wait | Select-String 'Error Alert Entry'
if ($fail -contains 'Error Alert Entry'){Write-Host "Warning Will Robinson!"}

我已经单独测试了 Get-Content 命令,这确实可以毫无问题地跟踪日志文件的输出,但是当设置为变量时,我什么也得不到。

我还测试了后一部分,当我使用以下方式手动定义 $fail 变量时,这可以工作:

$fail = 'Error Alert Entry'

似乎变量不喜欢通过主动拖尾日志文件来填充。如果有人能就如何克服这个问题提供一些指导,我将不胜感激。

【问题讨论】:

    标签: powershell powershell-2.0 powershell-3.0 powershell-4.0


    【解决方案1】:

    有时您必须使用 PS 检查您的假设。试试这个:

    $fail
    

    然后是这个:

    $fail.GetType()
    

    现在是这样的:

    $fail[0].GetType()
    

    你认为的String 数组实际上是Select-String 返回的MatchInfo 数组。你应该可以通过从MatchInfo 对象中挖掘出Value 来得到你想要的:

    $fail.matches.value -contains 'Error Alert Entry'
    

    或者您可以在第一行中挖掘价值:

    $fail = (Get-Content 'C:\ProgramData\Software\APP.LOG' -Tail 0 -Wait | Select-String 'Error Alert Entry').Matches.Value
    

    我不得不承认,Get-Content -Tail 0 -Wait 在我的环境中似乎不起作用。尽管对文件进行了更改,但该命令似乎无限期挂起。

    /编辑

    好的,我想我现在明白了。 Get-Content -Tail 0 -Wait 永远不会退出,因此它永远不会完成将其输出传送到Select-String 并且永远不允许$fail 接收数据。

    一种解决方案可能是将您的Get-Content -Tail 0 -Wait 包装在一个作业中并循环一个Receive-Job 调用以执行您的Write-Host 'Warning Will Robinson!'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      相关资源
      最近更新 更多