当我运行命令时,它会生成具有不同颜色的不同消息。我只想看到具有特定颜色的消息。是否有可能以某种方式按文本颜色过滤消息?我对 PowerShell 或基于 cmd 的解决方案很满意。
答案1
您只能通过读取控制台缓冲区中的每个字符来执行此操作,因为颜色仅在写入控制台时才应用。您也只能在普通控制台窗口中读取控制台缓冲区 - 例如,Powershell ISE 不支持GetBufferContents()
。
这是一个示例函数:
# Return text from window where foreground color is green
function Get-GreenText {
$bufferWidth = $host.ui.rawui.BufferSize.Width
$bufferHeight = $host.ui.rawui.CursorPosition.Y
$rec = new-object System.Management.Automation.Host.Rectangle 0,0,($bufferWidth – 1),$bufferHeight
$buffer = $host.ui.rawui.GetBufferContents($rec)
($buffer |
where ForegroundColor -like 'Green' |
Select -ExpandProperty Character
) -join ''
}
通过这种方式,我们可以捕获在 powershell 窗口内滚动时所能捕获到的绿色文本:
PS C:\> Write-Host 'This is default'
PS C:\> Write-Host 'This is Green' -ForegroundColor Green
PS C:\> Write-Host 'This is Magenta' -ForegroundColor Magenta
This is default
This is Green
This is Magenta
PS C:\> Get-GreenText
this is green
有关详细信息,请参阅:For more information, see:https://devblogs.microsoft.com/powershell/capture-console-screen/