我有以下脚本输出用户 Exchange 邮箱的颜色编码文件夹层次结构。如果超过某个阈值(在这种情况下为 20 MB),它将以红色输出该行,如果不是,则以灰色输出。
#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 MB,我的控制台文本在运行后仍为红色。此脚本假定原始控制台文本为灰色。如果不是灰色,那么我已经更改了用户的控制台文本。如果您不在表达式的上下文中,这两个问题都很容易解决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
注意:这样做的目的是最终将其压缩为单线。我知道我可以在启动管道之前存储变量并在管道完成后恢复颜色,但这会带来乐趣/恶化。我更好奇是否可以在不改变此管道的基本结构的情况下完成此操作。