PS监视器日志文件和更新变量与最新条目

时间:2018-01-26 13:58:24

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0

我正在尝试监视日志文件的最新条目,然后将输出传递给变量,以便我可以执行其他操作,对于此示例,我只是在控制台中弹出一条消息。

dplyr

我已经自己测试了Get-Content命令,这确实没有问题地对日志文件的输出进行Tail,但是当设置为Variable时我没有得到任何东西。

我还测试了后一部分,当我使用类似的东西手动定义$ fail变量时,这是有效的:

$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!"}

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

1 个答案:

答案 0 :(得分:1)

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

class EventSerializer(serializers.HyperlinkedModelSerializer):
    comments = serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name='api:comment-detail'
    )

然后这个:

$fail

现在这个:

$fail.GetType()

您认为$fail[0].GetType() 的数组实际上是String返回的MatchInfo数组。您应该能够通过从Select-String对象中挖掘Value来获得所需内容:

MatchInfo

或者你可以在第一行挖出价值:

$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