【问题标题】:Add Color to a Column in Powershell Results为 Powershell 结果中的列添加颜色
【发布时间】:2016-09-14 00:05:34
【问题描述】:

如何为名称列添加不同的颜色。如果可能的话,如果我将它导出到一个 txt 文件,它会保持颜色吗?

$time = (Get-Date).AddYears(-2)
Get-ChildItem -Recurse | `Where-Object {$_.LastWriteTime -lt $time} | ft -Wrap 
Directory,Name,LastWriteTime | Out-File spacetest.txt

谢谢

【问题讨论】:

    标签: powershell colors add


    【解决方案1】:

    看看 (Get-Host).UI.RawUI.ForegroundColor。 不,您不能将颜色保存到文本文件中。 您可以将颜色保存到 XML 文件、HTML 文件或使用 Excel 或 Word 自动化来创建支持颜色的适当文件。

    【讨论】:

      【解决方案2】:

      Communary.ConsoleExtensions [link] 可能会对您有所帮助

      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'
      

      ...使用正则表达式将第二个表格单元格内容替换为绿色字体标签。 这是一个非常简单的正则表达式搜索和替换,只会为第二列着色

      这是另一个仅控制台着色的实现,基于this 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]$Colors=@{}
          , [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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多