У меня есть следующий скрипт, который выводит иерархию папок с цветовой кодировкой почтового ящика Exchange пользователя. Он выводит линию красным цветом, если он превышает определенный порог (в этом случае 20 МБ) и серый, если нет.Как выразительно я могу получить выражение PowerShell в формате таблицы?
#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
Есть несколько проблем с этим скриптом.
Если последняя обработанная папка больше 20 МБ, мой текст консоли остается красным после его запуска. Этот сценарий предполагает, что исходный текст консоли был Gray. Если это не серый, я изменил текст консоли пользователя. Оба эти параметра очень легко разрешить, если вы не находитесь в контексте выражения 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
Примечание: Цель состоит в том, чтобы в конечном итоге сжать это до однострочного. Я знаю, что я могу сохранить переменную до начала работы конвейера и восстановить цвет после завершения конвейера, но это из-за этого увлекает/усугубляет ситуацию. Мне более любопытно, могу ли я это сделать без изменения базовой структуры этого конвейера.
Спасибо. Я ценю, что вы очищаете свое оригинальное выражение - теперь это намного более красноречиво. –