<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Сравнение времени лога последней строки PowerShell]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9587</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9587&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Сравнение времени лога последней строки PowerShell».]]></description>
		<lastBuildDate>Tue, 20 May 2014 22:07:53 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Сравнение времени лога последней строки PowerShell]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=83174#p83174</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Alex_12095)]]></author>
			<pubDate>Tue, 20 May 2014 22:07:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=83174#p83174</guid>
		</item>
		<item>
			<title><![CDATA[Re: Сравнение времени лога последней строки PowerShell]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82918#p82918</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Alex_12095)]]></author>
			<pubDate>Mon, 12 May 2014 22:00:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82918#p82918</guid>
		</item>
		<item>
			<title><![CDATA[Re: Сравнение времени лога последней строки PowerShell]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82896#p82896</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (greg zakharov)]]></author>
			<pubDate>Mon, 12 May 2014 07:10:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82896#p82896</guid>
		</item>
		<item>
			<title><![CDATA[Сравнение времени лога последней строки PowerShell]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82892#p82892</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Alex_12095)]]></author>
			<pubDate>Mon, 12 May 2014 01:34:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82892#p82892</guid>
		</item>
	</channel>
</rss>
