<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Сравнение времени лога последней строки PowerShell]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9587&amp;type=atom" />
	<updated>2014-05-20T22:07:53Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9587</id>
		<entry>
			<title type="html"><![CDATA[Re: Сравнение времени лога последней строки PowerShell]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83174#p83174" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code> 
          #Текущее время
          $f=get-date -uformat %R
          #Берет имена логов и передает их  
          gci \\путь\*маска*.log | % {                                            
          #Поиск последней строки каждого из файлов
    $d= tail &#039;\\путь\&#039;$_{0}  
          #Выбирает в последней строке с 6 по 11 символ(там содержиться время)
       $OFS=&quot;&quot;; $r= [string]&quot;$d&quot;[6..11]
        # Сравнение текущего времени и времени последней записи в файле
        $e= new-timespan -start ($f) -end($r) 
        #преобразование рез-та
        $OFW=&quot;&quot;; $q= [string]&quot;$e&quot;[0..8]
if ($q -gt &#039;-00:20:00&#039;)
    {
      &#039;{0} Разница &gt; 20&#039; -f $_
    }
elseif ($q -eq &#039;-00:20:00&#039;)
    {
      &#039; {0} Разница = 20&#039; -f $_
    }
else
    {
      &#039;{0} Все ок&#039; -f $_
    }  </code></pre></div><p>Подскажите пожалуйста в чем ошибка. <br />&quot;Не удается обработать преобразование аргументов для параметра &quot;NumberOfLines&quot;. Не удается преобразовать значение&quot;</p>]]></content>
			<author>
				<name><![CDATA[Alex_12095]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32194</uri>
			</author>
			<updated>2014-05-20T22:07:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83174#p83174</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сравнение времени лога последней строки PowerShell]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=82918#p82918" />
			<content type="html"><![CDATA[<p><strong>greg zakharov</strong>, <br />Пример лога:<br /></p><div class="codebox"><pre><code>Mar31 23:57 qwerty OK &gt;&gt; +OK 0 0
Mar31 23:57 qwerty OK &gt;&gt; QUIT
Mar31 23:57 qwerty OK &gt;&gt; +OK [XMail 1.27 POP3 Server] closing session</code></pre></div><p>Ошибки такого типа:</p><div class="codebox"><pre><code>
Mar18 11:52 qwerty Error: Подключение не установлено, т.к. конечный компьютер отверг запрос....... </code></pre></div><p>Задача: в неизвестном кол-ве файлов в последних 10 строках найти ошибки: &#039;Error&#039; эта задача выполнена<br /></p><div class="codebox"><pre><code>gci d:\logs\*smtppop*.log | % {if ((gc $_)[-1] -match &#039;Error&#039;) {&#039;File {0} есть&#039; -f $_} else {&#039;File {0} нету&#039; -f $_}}</code></pre></div><p>, а так же в каждом из этих файлов&nbsp; сравнить время последней строки с текущим временем, подготовить сообщение вида:<br /></p><div class="codebox"><pre><code>
имя лога:       есть ли ошибка:          есть ли разница во времени:(20 минут)
asdf.log           ошибок нет                       разница есть
......              .......                           .......
</code></pre></div><p>Макс. размер лога 40 mb ~ полмиллиона строк, в принципе скорость работы &quot;gc&quot; устраивает</p>]]></content>
			<author>
				<name><![CDATA[Alex_12095]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32194</uri>
			</author>
			<updated>2014-05-12T22:00:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=82918#p82918</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сравнение времени лога последней строки PowerShell]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=82896#p82896" />
			<content type="html"><![CDATA[<p><strong>Alex_12095</strong>, пожалуйста, чуть более конкретики: пример лога, тип ошибки.<br />В остальном, если правильно понимаю Вашу проблему,&nbsp; все сводится к получению разницы во времени между тем, который протоколируется и фактическим. Если так, то задача может быть решена примерно следующим образом:<br /></p><div class="codebox"><pre><code>New-TimeSpan ([Regex]&quot;(\d+\:){2}\d+&quot;).Match((gc mylog.txt)[-1]).Value $(date -u %R:%S)</code></pre></div><p>Но имейте в виду, что в примере выше учитывались секунды, т.е. после того, как последняя строка файла была считана:<br /></p><div class="codebox"><pre><code>(gc mylog.txt)[-1]</code></pre></div><p>в ход идет регулярное выражение:<br /></p><div class="codebox"><pre><code>(\d+\:){2}\d+</code></pre></div><p>Текущая дата также обрабатывается с секундами:<br /></p><div class="codebox"><pre><code>date -u %R:%S</code></pre></div><p>В сущности пример выше можно использовать как шаблон: что-то добавить, что-то отбросить. Другой вопрос насколько велик лог. Командлет Get-Content (или его альяс gc) едва ли подойдут для больших по объему логов, поэтому, если возникунут проблемы с чтением больших файлов, то лучше воспользоваться <a href="http://forum.script-coding.com/viewtopic.php?id=8881">tail</a>.</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2014-05-12T07:10:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=82896#p82896</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Сравнение времени лога последней строки PowerShell]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=82892#p82892" />
			<content type="html"><![CDATA[<p>Добрый вечер!<br />Есть такой скрипт: <br /></p><div class="codebox"><pre><code>
#выводит последнюю строку
$d= &quot;get-content -path d:\logs\file.log | select-object -last 1&quot; | powershell -command -
#Выбирает в последней строке с 6 по 11 символ
$OFS=&quot;&quot;; $r= [string]&quot;$d&quot;[6..11]
#Текущее время формата hh:mm
$f= get-date -uformat %R
#Сравнение текущего времени и временем последней записи в файле
$e= new-timespan -start ($f) -end($r) 
#Вывод рез-та
 write-host $e
</code></pre></div><p>Данный скрипт находит в одном файле последнюю строчку выбирает с 6 по 11 символ(там содержится время формата hh:mm) <br />Далее, дата последней строки сравнивается с текущим временем, и выводит разницу во времени типа (hh:mm:ss).<br />Есть еще такой кусок кода:<br /></p><div class="codebox"><pre><code>
$s= gci d:\logs\*smtppop*.log | % {if ((gc $_)[-1] -match &#039;Error&#039;) {&#039;File {0} есть&#039; -f $_} else {&#039;File {0} нету&#039; -f $_}}
$s
</code></pre></div><p>Этот код ищет &#039;Error&#039; в последней строке лога, рез-тат: имя лога и слово есть или нет &#039;Error&#039;.<br />Я пробовал модернизировать второй код под мою задачу, так как результат такого вида какого и необходим, но не могу найти решения как поставить условие на время, а именно если разница во времени &gt;20 минут, то рядом с файлом вывести, например &#039;да&#039;, в остальных случаях &#039;нет&#039;. Кол-во файлов заранее не известно.<br />Буду благодарен любой информации.</p>]]></content>
			<author>
				<name><![CDATA[Alex_12095]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32194</uri>
			</author>
			<updated>2014-05-12T01:34:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=82892#p82892</id>
		</entry>
</feed>
