ユーザーの 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
注: これの目的は、最終的にこれを 1 行に圧縮することです。パイプラインを開始する前に変数を保存し、パイプラインが終了した後に色を復元できることはわかっていますが、それでは楽しさ/悪化が取り除かれます。このパイプラインの基本構造を変更せずにこれを達成できるかどうかについては、もっと興味があります。