2017-07-31 5 views
1

私はそれに焼き付けられた色のエンコーディングを持つログファイルを持っていて、Powershellでログファイルの "tail tail"にしたがっています。次のスクリプトを呼び出すと、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コマンドの青い背景を黒にしたいだけです。なぜこれが起こっているのですか?どのように問題を解決できますか?

提案がありますか?

- EDIT -

出力イメージを添付しています。だからあなたは皆それを見ることができます。

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

テキストファイルが何であるかを明確にしてくれてありがとう。私はwrite-hostが何をしているのか理解しています。新しいファイルに出力することには興味がありません。私は、アプリケーションがPowershellターミナルウィンドウ内に黒い背景で作成した.outファイルを表示することに興味があります。 – ariestav

+1

「一部の行は黒色の背景色で出力されているようですが、一部は出力されていないようです」とはどういう意味ですか? –

答えて

0

あるとしてあなたのコードは私の作品:

Before Clearing the Host ... enter image description here

あなたがより良い答えをしたい場合、あなたはと遊ぶためにいくつかのサンプルデータを供給する必要があります。また、おそらくあなたの実際のコード。私はGet-Contentの出力を解析してフォアグラウンドカラーを設定していると仮定します。 Powershellはカラーエンコーディングを理解していないためです。

+0

ありがとうございます、はい、ANSIの色やタブを持たないファイルのテキストで動作します。しかし、私はこれを今解析していることを示すために質問を更新し、ANSIカラーエンコーディングを使ってログの一部にGistを追加しました。 – ariestav

関連する問題