私の答え をご覧ください これと同様の質問に。
Communary.ConsoleExtensions [リンク] 役立つかもしれません
Invoke-ColorizedFileListing C:\Windows -m *.dmp
プレ>上記のコマンドは、ファイルの種類を色分けし、ダンプ ファイルを強調表示します。
カラー出力を保存するには、RTF や HTML など、色を保持する形式で保存する必要があります。 Txt (プレーン テキスト ファイル) はテキストのみを保存します。
以下のコードは、出力を html ファイルとして保存します。
$time = (Get-Date).AddYears(-2) Get-ChildItem -Recurse | Where-Object {$_.LastWriteTime -lt $time} | Select Directory,Name,LastWriteTime | ConvertTo-Html -Title "Services" -Body "<H2>The result of Get-ChildItem</H2> " -Property Directory,Name,LastWriteTime | ForEach-Object { if ($_ -like '<tr><td>*') { $_ -replace '^(.*?)(<td>.*?</td>)<td>(.*?)</td>(.*)','$1$2<td><font color="green">$3</font></td>$4' } else { $_ } } | Set-Content "$env:TEMP\ColorDirList.html" -Force
プレ>行:
if ($_ -like '<tr><td>*') {
プレ>...テーブル行である html 出力の行をチェックします。
行:
$_ -replace '^(.*?)(<td>.*?</td>)<td>(.*?)</td>(.*)','$1$2<td><font color="green">$3</font></td>$4'
プレ>...正規表現を使用して、2 番目のテーブル セルの内容を緑色のフォント タグに置き換えます。 これは非常に単純な RegEx の検索と置換で、2 番目の列のみに色を付けます .
コンソールのみの別の実装を次に示します。 こちらのリンク に基づくカラーリング
$linestocolor = @( 'CSName Version OSArchitecture' '------ ------- --------------' 'BENDER 6.1.7601 64-bit ' 'LEELA 6.1.7601 64-bit ' 'FRY 6.1.7600 64-bit ' 'FARNSWORTH 6.1.7601 32-bit ' ) # http://www.bgreco.net/powershell/format-color/ function Format-Color { [CmdletBinding()] param( [Parameter(ValueFromPipeline=$true,Mandatory=$true)] $ToColorize , [hashtable][email protected]{} , [switch]$SimpleMatch , [switch]$FullLine ) Process { $lines = ($ToColorize | Out-String).Trim() -replace "`r", "" -split "`n" foreach($line in $lines) { $color = '' foreach($pattern in $Colors.Keys){ if (!$SimpleMatch -and !$FullLine -and $line -match "([\s\S]*?)($pattern)([\s\S]*)") { $color = $Colors[$pattern] } elseif (!$SimpleMatch -and $line -match $pattern) { $color = $Colors[$pattern] } elseif ($SimpleMatch -and $line -like $pattern) { $color = $Colors[$pattern] } } if ($color -eq '') { Write-Host $line } elseif ($FullLine -or $SimpleMatch) { Write-Host $line -ForegroundColor $color } else { Write-Host $Matches[1] -NoNewline Write-Host $Matches[2] -NoNewline -ForegroundColor $color Write-Host $Matches[3] } } } } $linestocolor | Format-Color -Colors @{'6.1.7600' = 'Red'; '32-bit' = 'Green'} # doesn't work... # (Get-ChildItem | Format-Table -AutoSize) | Format-Color -Colors @{'sql' = 'Red'; '08/07/2016' = 'Green'} # does work... Format-Color -ToColorize (Get-ChildItem | Format-Table -AutoSize) -Colors @{'sql' = 'Red'; '08/07/2016' = 'Green'} return
プレ>編集。 OP のリクエストに答える
$Result = @() foreach($server in Get-Content C:\PowerSQL\List.txt) { $Services=gwmi win32_service -computername $server | where {$_.Name -like ‘*SQL*’} if(!(Test-Connection -Cn $server -BufferSize 16 -Count 1 -ea 0 -quiet)) {“Problem still exists in connecting to $server”} else { $services | ForEach { If ($_) { $Result += New-Object PSObject -Property @{ HostName = $_.Systemname ServiceDisplayName = $_.Displayname ServiceName = $_.Name StartMode = $_.Startmode ServiceAccountName = $_.Startname State = $_.State Status = $_.Status } } } } } $Result | ConvertTo-HTML ` -Title "Services" ` -Body "<H2>The result of gwmi win32_service</H2> " ` -Property HostName,ServiceDisplayName,ServiceName,StartMode,ServiceAccountName,State,Status | ForEach-Object { if ($_ -like '<tr><td>*') { switch ($_) { { $_ -like '*<td>Stopped</td>*' } {$color='red'} { $_ -like '*<td>Running</td>*' } {$color='green'} Default {$color='white'} } $_.Replace('<tr>', "<tr bgcolor=`"$color`">") } else { $_ } } | Set-Content C:\PowerSQL\service.htm -Force
プレ>