У меня есть сценарий perl, который используется для мониторинга баз данных, и я пытаюсь написать его как скрипт powershell.
В скрипте perl есть функция, которая читает журнал ошибок, отфильтровывает, что это имеет значение, и возвращает его обратно.Он также сохраняет текущую позицию файла журнала, так что в следующий раз, когда ему нужно будет прочитать журнал, он может начать с того места, где он ушел, вместо того, чтобы снова читать весь журнал.Это делается с помощью функции tell .
У меня есть идея использовать командлет Get-Content и начать чтение с последней позиции, обрабатывать каждую строку до конца файлаи затем сохраняя позицию.
Знаете ли вы какие-либо приемы, чтобы я мог получить позицию в файле журнала после чтения и начать чтение в определенном месте.
Или есть лилучший и / или более простой способ добиться этого?
Gísli
РЕДАКТИРОВАТЬ: Это должно быть сделано с помощью сценария, а не с каким-либо другим инструментом.
РЕДАКТИРОВАТЬ: Итак, я где-то с .NET API, но это не совсем работает для меня.Я нашел полезные ссылки здесь и здесь
Вот что у меня есть:
function check_logs{
param($logs, $logpos)
$count = 1
$path = $logs.file
$br = 0
$reader = New-Object System.IO.StreamReader("$path")
$reader.DiscardBufferedData()
$reader.BaseStream.Seek(5270, [System.IO.SeekOrigin]::Begin)
for(;;){
$line = $reader.ReadLine()
if($line -ne $null){$br = $br + [System.Text.Encoding]::UTF8.GetByteCount($line)}
if($line -eq $null -and $count -eq 0){break}
if($line -eq $null){$count = 0}
elseif($line.Contains('Error:')){
$l = $line.split(',')
Write-Host "$line $br"
}
}
}
Я не нашел способ правильно использовать функцию поиска.Может кто-нибудь направить меня в правильном направлении?
Если я запускаю это, то выдает 5270, но если я запускаю это без строки, где я пытаюсь искать в основном потоке, я получаю:
2011-08-12 08:49:36.51 Logon Error: 18456, Severity: 14, State: 38. 5029
2011-08-12 08:49:37.30 Logon Error: 18456, Severity: 14, State: 38. 5270
2011-08-12 16:11:46.58 spid18s Error: 1474, Severity: 16, State: 1. 7342
2011-08-12 16:11:46.68 spid18s Error: 17054, Severity: 16, State: 1. 7634
2011-08-12 16:11:46.69 spid29s Error: 1474, Severity: 16, State: 1. 7894
Где первая часть - это строка, прочитанная из журнала, а число в конце представляет байты, прочитанные в этой точке.Итак, как вы можете видеть, я сейчас пытаюсь использовать функцию поиска, чтобы пропустить первую строку ошибки, но, как я сказал ранее, на выходе будет 5270, если я использую функцию поиска.
Чего мне не хватает ?????
Gísli