2014-12-08 15 views
9

Làm thế nào, nếu có, có thể thêm dấu thời gian vào mỗi dòng của đầu ra được tạo bởi toán tử PowerShell & không?Làm cách nào để thêm dấu thời gian vào các dòng riêng lẻ của PowerShell & đầu ra?

Ví dụ:

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 

mong muốn kết quả:

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 

tôi biết làm thế nào để tách/tham gia vào một mảng PowerShell, nhưng điều này chỉ có thể xảy ra sau khi các nhà điều hành & hoàn tất. Tôi đang tìm giải pháp giống như thời gian thực hơn, nơi dấu thời gian được thêm vào đầu ra trong khi toán tử & đang chạy.

Bằng cách này, dấu thời gian chính nó là $($(Get-Date -Format o) + ":")

Trả lời

33

Bạn có thể sử dụng một bộ lọc:

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

đầu ra mẫu từ $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

Câu hỏi của tôi là về cách thêm timestamps đến đầu ra trong lần đầu tiên nơi, không phải làm thế nào để lọc chúng trong (hoặc ra) sau đó. –

+2

Đó là những gì bộ lọc đang làm. Bộ lọc PowerShell là khối tập lệnh chấp nhận đầu vào từ đường ống và chạy một lần cho từng đối tượng mà nó lấy từ đường ống. Nó có chức năng giống như một hàm chỉ với một khối Process. Bộ lọc đó sẽ thêm dấu thời gian cho mỗi đầu ra dòng từ tệp thực thi của bạn. – mjolinor

+0

Ahh, thực sự, nó hoạt động chính xác như bạn đã mô tả. Cảm ơn một triệu - vấn đề đã được giải quyết! –

3

Bạn có thể sử dụng lệnh Start-Transcript kết hợp với lời nhắc tùy chỉnh trong tiểu sử của bạn:

# 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 " " 
} 

Tính năng này hoạt động tốt trên máy trạm Windows 7 của tôi. Tuy nhiên, trên một số cài đặt Server 2012 R2 mới hơn, Start-Transcript có vẻ hơi bị hỏng. Điều này khắc phục một phần của nó: https://support.microsoft.com/en-us/help/3014136/powershell-transcript-file-doesn-t-contain-the-correct-information-in-windows-server-2012-r2

... nhưng vẫn không khắc phục sự cố với lời nhắc tùy chỉnh.

Ví dụ, tôi thấy điều này trên console:

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

Và đây là những gì được viết vào nhật ký:

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

PS>hostname 
server463 
+0

Cảm ơn bạn, đây là một cách tiếp cận khá thú vị và tôi chắc chắn rằng nó hữu ích trong một số trường hợp nhất định. Tôi gắn bó với phương pháp tiếp cận bộ lọc dấu thời gian mặc dù theo câu trả lời của mjolinor ở trên. Phù hợp với nhu cầu của tôi tốt hơn. –

Các vấn đề liên quan