2015-02-25 3 views
1

Попытка увидеть, можно ли изменить цвет вывода с помощью следующих строк. Обратите внимание, что это не полный код и только часть его:Изменить цвет вывода в powershell

$ADInfo ` 
    | Format-List ` 
     @{ Name = "Full Name"; Expression = { $_.name } }, 
     @{ Name = "Display Name"; Expression = { $_.displayname } }, 
     @{ Name = "User ID"; Expression = { $_.samaccountname } }, 
     @{ Name = "Email"; Expression = { $_.mail } }, 
     @{ Name = "Exchange Version"; Expression = { $_.msExchVersion } }, 

Если возможно, я хотел бы изменить цвет названия и выходные данные независимо друг от друга.

Выход:

enter image description here

+1

Комбинации 'писать-хозяина -NoNewLine' может помочь с этим. Потенциально со сложной логикой. Каковы ваши условия окраски? – Matt

+0

Вы хотите [раскрасить каждую строку] (https://technet.microsoft.com/en-us/library/ff406264.aspx)? Некоторые элементы? Целая колонка? Было бы хорошо узнать, какой из них. – Matt

+0

Извините, у вас есть свои условия. Чтобы убедиться, что вы можете сделать факсимильную копию своего вывода для примера? – Matt

ответ

0
Function Write-HostColoured{ 
    [cmdletbinding()] 
    Param(
     [parameter(Mandatory=$true,ValueFromPipeline=$true)] 
     $Input, 
     [parameter(Mandatory=$true)] 
     [string]$ColouredProperty, 
     [System.ConsoleColor]$Colour = "Red" 

    ) 

    # Get all the note properties of the object which we need for output and determining conditional formatting. 
    $properties = $input | gm -MemberType NoteProperty | Select-Object -ExpandProperty name 

    # Find the property with the longest length. Used for aligning output. 
    $longestProperty = $properties | ForEach-Object{$_.Length} | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum 

    # Check if the property to colour requested is in $properties 
    If($properties -notcontains $ColouredProperty){Write-Warning "Input object does not contain the property $ColouredProperty"} 

    # Insert Line break between objects. 
    Write-Host 

    ForEach($singleObject in $Input){ 
     $properties | ForEach-Object{ 
      Write-Host ("{0,-$longestProperty} : " -f $_) -NoNewline 

      # Check if the property requires a colour formatting 
      If($_ -eq $ColouredProperty){ 
       Write-Host $singleObject.$_ -ForegroundColor $Colour 
      } Else { 
       Write-Host $singleObject.$_ 
      } 
     } 

     # Insert Line break between objects. 
     Write-Host 
    } 
} 

Import-Csv C:\temp\data.csv -header "Col123fff1","cl2","col3","col4" | Write-HostColoured -ColouredProperty Col3 

Пример вывода

enter image description here

Объяснение

Думайте, что вам нужно будет эволюционировать на основе вашего комментария, но давайте начнем с этого. Он будет принимать входной сигнал от объекта (тестируется с Import-CSV), а затем имитировать вывод Format-List. Пока он выводит с использованием Write-Host, если обрабатываемое свойство соответствует $ColouredProperty, тогда примените цвет переднего плана, определенный $colour.

В настоящее время это работает только в том случае, если вам нужно покрасить один столбец, но я мог видеть, что он принимает хэш-таблицу для условного форматирования.

Сообщите мне, если мы на правильном пути.

Условная раскраска

Вы можете легко сделать раскраску условной базы по критериям, если вы измените, если заявление и добавить еще один пункт

If($_ -eq $ColouredProperty -and $singleObject.$_ -match "\d") 

Это делает функцию менее передаче, но она будет работать. Я использовал это, чтобы выделить все имена файлов с номерами в них.

Get-ChildItem C:\temp -filter *.txt | Select Name,Length,Directory | Write-HostColoured -ColouredProperty Name  

enter image description here

+0

Думаю, что да. Я все еще новичок в powershell, но мне было интересно раскрасить результат, если он соответствует определенной строке. Если бы это было не слишком сложно. – Aaron

+0

@Aaron. Понял, что это будет то направление, в котором ты собирался. Это потребует меньше усилий, но я думаю, что мы можем это сделать (уже поворачивал колесо в моей голове).Нужно ли выделять имя столбца? – Matt

+0

Если это слишком сложно, нет. Но некоторые значения, которые я получаю, похожи на ... «Учетная запись заблокирована ?: True/False» .. поэтому причина, по которой я хотел бы иметь True или False, так ее легче обнаружить. – Aaron

Смежные вопросы