Mcafee故障更新状态警报

时间:2014-06-17 15:11:05

标签: powershell powershell-v2.0

这是我到现在想出来的:

Clear-Content e:\failure.txt #empty the output file

Get-Content C:\ProgramData\McAfee\DesktopProtection\Updatelog.txt | foreach {
  if($_ -like "*Update process failed*") {
    $_|out-file e:\failure.txt -Append
  }
}

但有没有办法可以写作,或者每天都会逐步写入?

有没有办法从所有行中排除一个项目?

例如:

log file of mcafee: 9/29/2012
5:42:09 PM NT AUTHORITY\SYSTEM
Product(s) running the latest DATs.

我不想包括" NT AUTHORITY \ SYSTEM"在我正在复制的文件中。

1 个答案:

答案 0 :(得分:0)

这比你想象的要容易。 McAfee日志是TAB DELIMITED!为了你的目的,这有多棒?您可以将其作为CSV导入,分隔符为Tab,并在导入时指定列(日期,时间,用户,消息),然后筛选您要输出的内容!

所以,比如:

$mcafee = import-csv C:\ProgramData\McAfee\DesktopProtection\UpdateLog.txt -Header "Date","Time","User","Message" -Delimiter "`t"
$McAfee | ?{$_.Date -eq (Get-date -f "M/d/yyyy") -and $_.Message -match "Update process failed"} | %{
    "{0}`t{1}`t{2}" -f $_.Date, $_.Time, $_.Message | Out-File e:\failure.txt -Append
}

这只会获取当天的项目,只会显示更新失败的行,并且会排除用户名。

*为清楚起见,?{...}Where{...}的缩写,%{...}ForEach{...}的缩写。

修改:在上次评论中执行您尝试执行的操作的正确方法是:

import-csv C:\ProgramData\McAfee\DesktopProtection\UpdateLog.txt -Header "Date","Time","User","Message" -Delimiter "`t"|?{$_.Date -eq (Get-date -f "M/d/yyyy") -and $_.Message -match "Update process failed"}| %{"{0}`t{1}`t{2}" -f $_.Date, $_.Time, $_.Message | Out-File d:\logfile.txt -Append }

这是一个单行,但它很长,难以阅读,这可能是你遇到问题的原因。