3 votes

PowerShell ne pas afficher les couleurs Unix

J'utilise divers programmes Linux sur ma machine Windows; certains d'entre eux ont une sortie colorisée. GnuWin32 et ainsi de suite.

Cependant, Windows PowerShell ne prend pas en charge les couleurs Linux; il obtient un message comme [0m31m (qui est le code de contrôle de couleur), et le rend au lieu de la couleur.

Y a-t-il un moyen de contourner cela?

3voto

OrionDarkwood Points 488

Powershell est simplement un programme en mode texte, s'exécutant dans la console Windows. La console Windows ne prend pas en charge les séquences d'échappement ANSI que vous voyez.

Pour le corriger, cela dépend beaucoup du programme que vous utilisez. Je suppose que vous utilisez cygwin pour exécuter ces scripts ?

3voto

Dalroth Points 2468

Vous pouvez utiliser Cygwin pour exécuter PowerShell et les scripts PowerShell :

alt text

Cygwin peut gérer les séquences d'échappement.

3voto

Asker Points 139

Pour la postérité

Vous pouvez utiliser ANSICON pour afficher des séquences d'évasion ANSI dans les consoles Windows, y compris Powershell. Cela devrait vous donner de la couleur.

Ce fil de discussion sur la façon de le faire fonctionner avec PowerShell propose quelques solutions différentes car il existe plus d'une façon de le faire.

3voto

Paebbels Points 170

J'étais aussi à la recherche d'une bonne solution, mais je n'en ai trouvé aucune ...

Voici un court script PowerShell pour traduire les codes de couleur ANSI :

function Open-Colored([String] $Filename)
  { Write-Colored(cat -Raw $Filename) }

function Write-Colored([String] $text)
  { # split text at ESC-char
    $split = $text.Split([char] 27)
    foreach ($line in $split)
      { if ($line[0] -ne '[')
          { Write-Host $line -NoNewline }
        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 Gree        }
                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       }
              }
          }
      }
  }

Utilisation :

Open-Colored .\myColoredLogfile.log

Actuellement, je n'ai aucune idée de comment intégrer ceci dans une page (par exemple, moins) ou comment écrire un propre paginateur simple comme moins.

PSCX est livré avec un clone de moins, mais il n'a pas encore de prise en charge des codes de couleur ANSI...

0voto

Jaime Points 141

Vous pourriez utiliser une machine virtuelle Linux pour lancer ces scripts. C'est beaucoup de travail pour un petit résultat s'il s'agit simplement d'afficher des couleurs, mais cela ne peut pas faire de mal de les exécuter sur la plateforme pour laquelle ils ont été conçus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X