2017-07-31 53 views
1

我有一個日誌文件,其中包含了顏色編碼,並且我想用PowerShell跟蹤日誌文件的尾部。當我調用以下腳本時,Powershell將以其標準藍色背景啓動,並且日誌文件中編碼的顏色顯示出來。使用Get-Content時Powershell終端顏色輸出不正確,爲什麼?

Get-Content -Path 'C:\myapp.out' -Wait 

但是,我想要的是Powershell終端的背景是黑色的,但保留在日誌文件中找到的顏色編碼。所以,做一些研究,我發現你可以改變PowerShell的終端方面,我的劇本變成這樣:

$host.ui.RawUI.WindowTitle = "Log Title" 
$host.ui.RawUI.BackgroundColor = "black" 

Clear-Host 

Get-Content -Path 'C:\myapp.out' -Wait 

PowerShell的終端的背景做實際上變爲黑色,但它似乎像Get-Content的輸出仍然具有標準Powershell的藍色背景。所以,更多的研究後,我意識到,我可以這樣做:

$host.ui.RawUI.WindowTitle = "Log Title" 
$host.ui.RawUI.BackgroundColor = "black" 

Clear-Host 

Get-Content -Path 'C:\myapp.out' -Wait | ForEach { write-host $_ -BackgroundColor "black"} 

現在,這並不改變事物一點,但不會使每一條線路從myapp.out文件中有一個黑色的背景。看起來好像myapp.out的一些行以黑色背景色輸出,但有些不是。

我看了this Stack Overflow question,但是這並沒有完全解決問題。我只想讓Get-Content命令的藍色背景變黑。爲什麼會發生這種情況,我該如何解決這個問題?

有什麼建議嗎?

- 編輯 -

我附上輸出圖像。所以你們都可以看到它。

Strangely colored output in Powershell

我想解析該文件是最好的,因爲它已經ANSI編碼的顏色。我確實看到this stack overflow example of maintaining the ANSI colors,但使用找到的代碼仍然無法準確顯示。這裏是我已經把它組成:

$host.ui.RawUI.WindowTitle = "Log Title" 
$host.ui.RawUI.BackgroundColor = "black" 

Clear-Host 

Get-Content -Path 'C:\myapp.out' -Wait | 
     ForEach { 
      $split = $_.Split([char] 27) 
      foreach ($line in $split) 
       { if ($line[0] -ne '[') 
        { Write-Host $line } 
       else 
        { if  (($line[1] -eq '0') -and ($line[2] -eq 'm')) { Write-Host $line.Substring(3) -NoNewline } 
        elseif (($line[1] -eq '3') -and ($line[3] -eq 'm')) 
         { # normal color codes 
         if  ($line[2] -eq '0') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor Black  } 
         elseif ($line[2] -eq '1') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkRed  } 
         elseif ($line[2] -eq '2') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkGreen } 
         elseif ($line[2] -eq '3') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkYellow } 
         elseif ($line[2] -eq '4') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkBlue } 
         elseif ($line[2] -eq '5') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkMagenta } 
         elseif ($line[2] -eq '6') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkCyan } 
         elseif ($line[2] -eq '7') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor Gray  } 
         } 
        elseif (($line[1] -eq '3') -and ($line[3] -eq ';') -and ($line[5] -eq 'm')) 
         { # bright color codes 
         if  ($line[2] -eq '0') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor DarkGray } 
         elseif ($line[2] -eq '1') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Red   } 
         elseif ($line[2] -eq '2') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Green  } 
         elseif ($line[2] -eq '3') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Yellow  } 
         elseif ($line[2] -eq '4') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Blue  } 
         elseif ($line[2] -eq '5') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Magenta  } 
         elseif ($line[2] -eq '6') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Cyan  } 
         elseif ($line[2] -eq '7') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor White  } 
        } 
       } 
      } 
     } 

這並「提高」有色日誌文件的顯示,但是請注意標籤如何似乎在第一行被刪除,並且着色返回到白色時它應該是一個藍色:

enter image description here

我還添加了a gist of a portion of this ANSI colored log文件,以瞭解源更好:

+0

1)文本文件沒有顏色。他們只是文字。 2)'Write-Host'只寫入主機,而不寫入文件。 –

+1

感謝您澄清哪些文本文件。我瞭解寫主機做什麼,並且我不想輸出到新文件。我有興趣顯示我的應用程序在黑色背景的Powershell終端窗口中創建的.out文件。 – ariestav

+1

「看起來好像有些線條是用黑色背景色輸出的,但有些不是」是什麼意思? –

回答

0

你的代碼工作對我來說是:

Before Clearing the Host ... enter image description here

如果你想有一個更好的答案,你需要提供一些樣本數據一起玩。另外,也許你的實際代碼。我假設你正在解析Get-Content的輸出並設置前景色;因爲PowerShell不瞭解顏色編碼。

+0

謝謝,是的,它適用於沒有ANSI顏色或選項卡的文件中的文本。但是我更新了這個問題,以顯示我現在如何解析它,以及使用ANSI顏色編碼的一部分日誌。 – ariestav

相關問題