sql >> データベース >  >> RDS >> Sqlserver

powershell 出力に色を適用する方法

    私の答え をご覧ください これと同様の質問に。

    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
      


    1. ORA-00911:無効な文字のヒキガエル

    2. 読み取りと書き込みを多用するアプリケーションの場合、URLをmysqlに保存するための最良の方法

    3. PG ::エラー:エラー:新しいエンコーディング(UTF8)に互換性がありません

    4. 同じIDの行を配列にマージします