Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So wenden Sie Farben in der Powershell-Ausgabe an

Siehe meine Antwort auf eine ähnliche Frage wie diese.

Communary.ConsoleExtensions [link] könnte dir helfen

Invoke-ColorizedFileListing C:\Windows -m *.dmp

Der obige Befehl färbt Dateitypen ein und hebt Dump-Dateien hervor.

Um eine Farbausgabe zu speichern, müssten Sie in einem Format speichern, das Farbe beibehält, wie RTF oder HTML. Txt (einfache Textdatei) speichert nur Text.

Der folgende Code speichert Ihre Ausgabe als HTML-Datei.

$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

Die Zeile:

if ($_ -like '<tr><td>*') {

...überprüft die HTML-Ausgabe auf eine Zeile, die eine Tabellenzeile ist.

Die Zeile:

$_ -replace '^(.*?)(<td>.*?</td>)<td>(.*?)</td>(.*)','$1$2<td><font color="green">$3</font></td>$4'

...verwendet einen RegEx, um den Inhalt der 2. Tabellenzelle durch ein Font-Tag mit der Farbe Grün zu ersetzen. Dies ist ein sehr einfaches RegEx-Suchen und Ersetzen, das nur die zweite Spalte einfärbt .

Und hier ist eine weitere Implementierung von console only Farbgebung, basierend auf diesem Link

$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

BEARBEITEN. um die OP-Anfrage zu beantworten

$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