2014-12-08 3 views
9

Как, если вообще возможно, добавить метки времени в каждую строку вывода, сгенерированного оператором PowerShell &?Как добавить временные метки в отдельные строки PowerShell и вывода?

Пример:

PS H:\> $result = & ping 192.168.1.1 
PS H:\> echo $result 

Pinging 192.168.1.1 with 32 bytes of data: 
Reply from 192.168.1.1: bytes=32 time=104ms TTL=250 
Reply from 192.168.1.1: bytes=32 time=106ms TTL=250 
Reply from 192.168.1.1: bytes=32 time=102ms TTL=250 
Reply from 192.168.1.1: bytes=32 time=102ms TTL=250 
Ping statistics for 192.168.1.1: 
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
Minimum = 102ms, Maximum = 106ms, Average = 103ms 

Желаемый результат:

PS H:\> echo $result 

2014-12-08T14:45:48.8898125+00:00:Pinging 192.168.1.1 with 32 bytes of data: 
2014-12-08T14:45:48.8932661+00:00:Reply from 192.168.1.1: bytes=32 time=104ms TTL=250 
2014-12-08T14:45:48.9233451+00:00:Reply from 192.168.1.1: bytes=32 time=106ms TTL=250 
2014-12-08T14:45:48.9765438+00:00:Reply from 192.168.1.1: bytes=32 time=102ms TTL=250 
2014-12-08T14:45:49.0233105+00:00:Reply from 192.168.1.1: bytes=32 time=102ms TTL=250 
2014-12-08T14:45:49.0233201+00:00: 
2014-12-08T14:45:49.0238753+00:00:Ping statistics for 192.168.1.1: 
2014-12-08T14:45:49.0239210+00:00: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
2014-12-08T14:45:49.0233318+00:00:Approximate round trip times in milli-seconds: 
2014-12-08T14:45:49.0237209+00:00: Minimum = 102ms, Maximum = 106ms, Average = 103ms 

Я знаю, как разделить/присоединиться массив PowerShell, но это может произойти только после оператора & завершается. Я ищу больше решений в режиме реального времени, где временные метки добавляются к выходу, пока работает оператор &.

Кстати, сама временная отметка $($(Get-Date -Format o) + ":")

ответ

33

Вы можете использовать фильтр:

filter timestamp {"$(Get-Date -Format o): $_"} 
$result = & ping 192.168.1.1 | timestamp 

Пример вывода из $result:

2014-12-08T11:42:59.2827202-05:00: 
2014-12-08T11:42:59.2857205-05:00: Pinging 192.168.1.1 with 32 bytes of data: 
2014-12-08T11:43:03.1241043-05:00: Request timed out. 
2014-12-08T11:43:08.1236042-05:00: Request timed out. 
2014-12-08T11:43:13.1241042-05:00: Request timed out. 
2014-12-08T11:43:18.1246042-05:00: Request timed out. 
2014-12-08T11:43:18.1246042-05:00: 
2014-12-08T11:43:18.1246042-05:00: Ping statistics for 192.168.1.1: 
2014-12-08T11:43:18.1246042-05:00:  Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), 
+0

Мой вопрос был о том, как добавить метки к выходу в первом место, а не как их впоследствии фильтровать (или выходить). –

+2

Вот что делает фильтр. Фильтр PowerShell - это блок сценариев, который принимает входные данные из конвейера и запускается один раз для каждого объекта, который он получает из конвейера. Это функционально то же самое, что и функция с только блоком Process. Этот фильтр добавит метку времени к каждой строке, выводимой из вашего исполняемого файла. – mjolinor

+0

Ах, действительно, он работает так, как вы описали. Спасибо миллион - проблема решена! –

3

Можно использовать командлет Start-Transcript в сочетании с пользовательским приглашением в вашем профиле:

# Configure PS prompt to show date and time 
function prompt 
{ 
    $promptStringStart = "PS:" + (Get-Date -format MM/dd/yy` hh:mm:ss) 
    $promptStringEnd += ">" 
    Write-Host $promptStringStart -NoNewline -ForegroundColor Yellow 
    Write-Host $promptStringEnd -NoNewline -ForegroundColor Yellow 
    return " " 
} 

Это отлично работает на моей рабочей станции Windows 7. Тем не менее, на некоторых более ранних версиях Server 2012 R2 Start-Transcript, похоже, немного сломан. Это исправляет его часть: https://support.microsoft.com/en-us/help/3014136/powershell-transcript-file-doesn-t-contain-the-correct-information-in-windows-server-2012-r2

... но это не устраняет проблему с помощью пользовательского приглашения.

Например, я вижу это на консоли:

PS:02/14/17 08:28:20> hostname 
server463 

И это то, что написано в журнале:

PS:02/14/17 08:28:20 
> 

PS>hostname 
server463 
+0

Спасибо, это довольно интересный подход, и я уверен, что он полезен в определенных сценариях. Я придерживаюсь подхода к методу отметки времени, хотя в соответствии с ответом mjolinor выше. Мне больше всего подходит. –

Смежные вопросы