是否可以根据颜色选择字符串?

是否可以根据颜色选择字符串?

当我运行命令时,它会生成具有不同颜色的不同消息。我只想看到具有特定颜色的消息。是否有可能以某种方式按文本颜色过滤消息?我对 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/

相关内容