Format-Table의 PowerShell 출력 색상을 지정하는 방법
값이 100MB보다 크면 열 RAM을 빨간색으로 색칠하려고 합니다.
Get-Process | Format-Table @{ Label = "PID"; Expression={$_.Id}},
@{ Label = "Name"; Expression={$_.Name}},
@{ Label = "RAM (MB)"; Expression={[System.Math]::Round($_.WS/1MB, 1)}},
@{ Label = "Responding"; Expression={$_.Responding}}
Write-Host-nonnewline으로 시도해 보았지만 결과가 잘못되었습니다.
Get-Process | Format-Table @{ Label = "PID"; Expression={$_.Id}},
@{ Label = "Name"; Expression={$_.Name}},
@{ Label = "RAM (MB)"; Expression={write-host -NoNewline $([System.Math]::Round($_.WS/1MB, 1)) -ForegroundColor red}},
@{ Label = "Responding"; Expression={ write-host -NoNewline $_.Responding -fore red}}
PowerShell 5.1 이상에서는 VT 이스케이프 시퀀스를 사용하여 단일 열에 색상을 추가할 수 있지만 콘솔이 VT 이스케이프 시퀀스를 지원하는 경우에만 가능합니다(예: Windows 10 Fall Creators Update, Linux 또는 Mac, ConEmu와 같은 콘솔 에뮬레이터가 없는 Windows 8은 지원하지 않음).
다음은 ps1xml 파일에서 동일한 형식을 사용할 수 있지만 식에 지정된 형식을 갖는 예제입니다.
dir -Exclude *.xml $pshome | Format-Table Mode,@{
Label = "Name"
Expression =
{
switch ($_.Extension)
{
'.exe' { $color = "93"; break }
'.ps1xml' { $color = '32'; break }
'.dll' { $color = "35"; break }
default { $color = "0" }
}
$e = [char]27
"$e[${color}m$($_.Name)${e}[0m"
}
},Length
그리고 결과적으로, 열 너비가 양호해 보이고 이스케이프 시퀀스 문자에 공백이 없습니다.
허용된 답변이 올바르지 않습니다. 열에 색상을 지정할 수 있습니다.조건부 열 색상을 가져오는 방법은 쓰기-PSObject를 사용하는 것입니다.
다음은 코드와 설명이 문서화된 몇 가지 멋진 예입니다.
위의 리소스에서:
Write-PSObject $servers -MatchMethod Exact -Column "Manufacture" -Value "HP" -ValueForeColor Yellow -ValueBackColor Red -RowForeColor White -RowBackColor Blue;
Format-Table에 색상 형식을 추가하기 위해 GitHub 문제를 통해 이를 찾았습니다. 이 기능은 PowerShell 개발자들이 언젠가 추가하고자 하는 기능인 것 같습니다.
정규식을 사용하여 행에 색상을 지정할 수 있습니다.
filter colorize-row{
Get-Process | Select-Object Id, Name, WS, Responding | foreach {
# Print 'red' row if WS greater than 100 MB
if([System.Math]::Round($_.WS/1MB,1) -match "^([0-9]|[0-9][0-9]|[1-9][0-9]?$|^100$)$"){
[console]::ForegroundColor="white"; $_;
} else {
[console]::ForegroundColor="red"; $_;
}
}
}
colorize-row
출력:
빠른 대답은 할 수 없다는 것입니다.쓰기 호스트를 색상과 함께 사용할 수 있지만 형식 테이블로 보낼 "출력"이 없습니다.
Write-Host의 "출력"은 표준 기능처럼 데이터를 호출자에게 반환하지 않고 콘솔로 직접 전송하는 부작용입니다.
@David Martin의 코멘트와 함께, 흥미로운 패턴 매칭 형식-색상 기능이 있는 링크가 있습니다.
PsWrite 모듈을 설치할 수 있습니다.
그는 또한 다른 똑똑한 기능들을 가지고 있습니다.
예, ANSI 이스케이프 색상을 사용할 수 있으며 다음 색상을 조건부로 지정할 수 있습니다.
Get-Process | Format-Table @{ Label = "PID"; Expression={$_.Id}},
@{ Label = "Name"; Expression={$_.Name}},
@{ Label = "RAM (MB)"; Expression={if($_.WS/1MB -gt 100){"$([char]27)[0;31m$([System.Math]::Round($_.WS/1MB, 1))$([char]27)[0m"}else{"$([char]27)[0;32m$([System.Math]::Round($_.WS/1MB, 1))$([char]27)[0m"}}},
@{ Label = "Responding"; Expression={if($_.Responding -eq $true){"$([char]27)[0;32m$($_.Responding)$([char]27)[0m"}else{"$([char]27)[0;31m$($_.Responding)$([char]27)[0m"}}}
언급URL : https://stackoverflow.com/questions/20705102/how-to-colorise-powershell-output-of-format-table
'programing' 카테고리의 다른 글
도커 합성으로 도커 이미지에 태그를 지정하는 방법 (0) | 2023.08.18 |
---|---|
Sass에서 :after 및 :before 유사 요소 선택기 (0) | 2023.08.18 |
Android ADB 장치 오프라인, 명령을 실행할 수 없음 (0) | 2023.08.18 |
창 기능을 사용하여 표의 열을 업데이트하는 방법 (0) | 2023.08.18 |
C#에서 문자열 인코딩 결정 (0) | 2023.08.18 |