【问题标题】:Extracting only updated content from .log file using PowerShell使用 PowerShell 仅从 .log 文件中提取更新的内容
【发布时间】:2017-10-21 21:45:33
【问题描述】:

我正在尝试创建一个 PowerShell 脚本,它将充当日志文件的观察者并指出日志文件中的更改。

不知何故,我无法实现对更改的指出,我尝试了以下代码,在这里我尝试在过去 15 分钟内获取更改,但没有成功:

$File = "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log"
$Action = 'awk ' $0 >= from' from=$(date -u -d -15min "+####<%d-%b-%Y %H:%M:%S o'clock GMT>") error.log'
$global:FileChanged = $false

function Wait-FileChange {
param(
    [string]$File,
    [string]$Action
)
$FilePath = Split-Path $File -Parent
$FileName = Split-Path $File -Leaf
$ScriptBlock = [scriptblock]::Create($Action)

$Watcher = New-Object IO.FileSystemWatcher $FilePath, $FileName -Property @{ 
    IncludeSubdirectories = $false
    EnableRaisingEvents = $true
}
$onChange = Register-ObjectEvent $Watcher Changed -Action {$global:FileChanged = $true}

while ($global:FileChanged -eq $false){
    Start-Sleep -Milliseconds 100
}

& $ScriptBlock 
Unregister-Event -SubscriptionId $onChange.Id
}

Wait-FileChange -File $File -Action $Action

后来我用下面的代码更改了$Action 部分,它将获取最后 5 行,我让它工作正常

$Action = 'Get-Content "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs\error.log" | Select-Object -last 5 '

但我的目标是观察更改并打印所做的更改。 任何人都可以帮助我解决这个问题,任何帮助都很有价值。

【问题讨论】:

    标签: powershell awk


    【解决方案1】:

    但我的目标是观察变化并打印出变化 制作。

    您是否知道Get-Content cmdlet 有一个-Wait 开关:

    Get-Content $File -Wait
    

    【讨论】:

    • 我对此知之甚少,~Wait 是一种开关参数,但我在某处读到它在 windows 上用处不大。但它对我有什么帮助呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多