사용자의 Exchange 사서함에 색으로 구분 된 폴더 계층 구조를 출력하는 다음 스크립트가 있습니다. 특정 임계 값 (이 경우 20MB) 이상이면 빨간색을 출력하고 그렇지 않으면 회색을 출력합니다.Format-Table에서 PowerShell Expression을 표현하는 방법은 무엇입니까?
#Get Folder Size Breakdown to Table with Color Coding
get-mailbox $username |
Get-MailboxFolderStatistics |
ft @{
Name="Name"
Expression=
{
$prefix=""
foreach($c in $_.FolderPath.ToCharArray())
{
if($c -eq '/'){$prefix+='-'}
}
if($_.FolderSize -gt 20MB)
{
$Host.UI.RawUI.ForegroundColor = "Red"
} else
{
$Host.UI.RawUI.ForegroundColor = "Gray"
}
$prefix + $_.Name
}
},
FolderSize,
FolderandSubfolderSize
이 스크립트에는 몇 가지 문제가 있습니다.
처리 된 마지막 폴더가 20MB보다 큰 경우 콘솔이 실행 된 후 콘솔 텍스트가 빨간색으로 유지됩니다. 이 스크립트는 원래 콘솔 텍스트가 회색 인 것으로 가정합니다. 회색이 아니라면 사용자의 콘솔 텍스트를 변경했습니다. format-table
표현의 컨텍스트에 있지 않다면이 두 가지 방법 모두 매우 쉽게 해결할 수 있지만,이 특별한 경우에 이러한 문제를 해결할 수 없다면 나에게 많은 어려움이 있습니다. 여기 내가 시도한 것의 요지가 있지만 작동하지 않습니다. (실제로 20 가지 변형을 시도했습니다.)
get-mailbox $username |
Get-MailboxFolderStatistics |
ft @{
Name="Name"
Expression=
{
$prefix=""
$originalColor = $Host.UI.RawUI.ForegroundColor
foreach($c in $_.FolderPath.ToCharArray())
{
if($c -eq '/'){$prefix+='-'}
}
if($_.FolderSize -gt 20MB)
{
$Host.UI.RawUI.ForegroundColor = "Red"
}
$prefix + $_.Name
$Host.UI.RawUI.ForegroundColor = $originalColor
}
},
FolderSize,
FolderandSubfolderSize
참고 : 결국 이것은 한 줄짜리로 압축하는 것입니다. 파이프 라인을 시작하기 전에 변수를 저장할 수 있고 파이프 라인이 완료된 후에는 색상을 복원 할 수 있다는 것을 알고 있습니다. 그러나 재미있는 점이 있습니다. 이 파이프 라인의 기본 구조를 변경하지 않고도이 작업을 수행 할 수 있는지 여부에 대해 더 궁금합니다.
감사합니다. 제 원래 표현을 정리 해줘서 고맙습니다. 지금은 훨씬 더 간결합니다. –