You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell的RichTextBox中为指定行设置特定颜色

问题解决:PowerShell WinForms RichTextBox 部分文本设红色

问题概述

编写PowerShell WinForms脚本,希望在RichTextBox中显示SMB1协议状态和杀毒软件状态,仅将特定行(杀毒软件提示行、SMB1启用警告行)设置为红色,但当前所有文本都显示为红色。

问题原因

原代码通过$RichTextBox.Text = Script_English直接将函数输出的纯文本赋值给控件,这种方式会丢失所有格式设置,且没有正确控制RichTextBox的选中文本颜色切换逻辑。

修改后的完整代码

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = "1000,1000"
$Form.BackColor="#34495E"
$Form.Text="系统状态检查"

$RichTextBox = New-Object System.Windows.Forms.RichTextBox
$RichTextBox.BackColor="darkblue"
$RichTextBox.ForeColor="white"
$RichTextBox.Multiline = $true
$RichTextBox.Width = 900
$RichTextBox.Height = 650
$RichTextBox.Location = New-Object System.Drawing.Point(50,50)
$RichTextBox.AutoSize=$true
$RichTextBox.Scrollbars = "Vertical"
$RichTextBox.ReadOnly=$true
$RichTextBox.Font="Arial,15"

$Button = New-Object System.Windows.Forms.Button
$Button.Text = "开始检查"
$Button.BackColor="#CCCCCC"
$Button.Width = 90
$Button.Height =30
$Button.Location = New-Object System.Drawing.Point(850,900)

$Button.Add_Click({
    # 清空之前的内容
    $RichTextBox.Clear()
    # 设置默认颜色为白色
    $defaultColor = [Drawing.Color]::White
    $redColor = [Drawing.Color]::Red

    # --- 检查杀毒软件 ---
    $RichTextBox.SelectionColor = $defaultColor
    $RichTextBox.AppendText("--- 正在检查杀毒软件... ---`r`n`r`n")

    $Antivirus = wmic /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName | 
        findstr /v /r /c:"^$" /c:"displayName"

    if ($Antivirus.Length -gt 0) {
        # 设置红色显示提示行
        $RichTextBox.SelectionColor = $redColor
        $RichTextBox.AppendText("设备已安装杀毒软件:`r`n")
        # 恢复白色显示杀毒软件列表
        $RichTextBox.SelectionColor = $defaultColor
        $RichTextBox.AppendText($Antivirus | Out-String)
        $RichTextBox.AppendText("`r`n")
    }
    else {
        $RichTextBox.SelectionColor = $defaultColor
        $RichTextBox.AppendText("设备未安装杀毒软件。`r`n`r`n")
    }

    # --- 检查SMB1协议 ---
    $RichTextBox.SelectionColor = $defaultColor
    $RichTextBox.AppendText("`r`n--- 正在检查SMB1协议状态... ---`r`n`r`n")

    $SMB1_Protocol_Check = Get-SmbServerConfiguration | Select-Object -ExpandProperty EnableSMB1Protocol
    if (-not $SMB1_Protocol_Check) {
        $RichTextBox.SelectionColor = $defaultColor
        $RichTextBox.AppendText("SMB1协议已禁用,状态正常!`r`n")
    }
    else {
        # 设置红色显示警告行
        $RichTextBox.SelectionColor = $redColor
        $RichTextBox.AppendText("SMB1协议已启用!SMB1存在安全风险,建议立即禁用!`r`n")
    }
})

$Form.Controls.AddRange(@($RichTextBox,$Button))
[void]$Form.ShowDialog()

关键修改说明

  • 替换文本赋值方式:不再直接将函数输出赋值给Text属性,改用AppendText逐段添加内容,配合SelectionColor控制每段文本颜色
  • 颜色切换逻辑:每次添加文本前先设置目标颜色,添加完需要变色的内容后立即恢复默认白色,避免后续文本继承红色
  • 优化SMB1检查逻辑:直接提取EnableSMB1Protocol的布尔值,比字符串匹配更可靠
  • 调整控件布局:缩小RichTextBox宽度适配窗体尺寸,避免超出显示范围

内容的提问来源于stack exchange,提问作者Cino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:35:23