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

如何在PowerShell WinForm ComboBox中按AD用户状态着色显示用户

PowerShell WinForm ComboBox 实现带状态颜色的AD用户列表

要实现ComboBox中AD用户根据账户状态显示不同字体颜色,默认ComboBox不支持单独设置项的样式,需要通过**自定义绘制(OwnerDraw)**来实现,具体步骤和代码如下:

关键步骤说明

  • 获取AD用户时需同时提取账户状态相关属性:Enabled(账户是否启用)、PasswordNeverExpires(密码是否永不过期)
  • 将完整的AD用户对象添加到ComboBox,而非仅添加用户名,方便后续读取状态属性
  • 开启ComboBox的OwnerDrawFixed绘制模式,通过DrawItem事件自定义每个项的字体颜色

完整代码示例

# 加载必要的程序集
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 创建WinForm窗体
$form = New-Object System.Windows.Forms.Form
$form.Text = "AD用户列表"
$form.Size = New-Object System.Drawing.Size(400, 300)

# 创建ComboBox控件
$comboBox1 = New-Object System.Windows.Forms.ComboBox
$comboBox1.Location = New-Object System.Drawing.Point(20, 20)
$comboBox1.Size = New-Object System.Drawing.Size(350, 25)
$comboBox1.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
# 启用自定义绘制模式
$comboBox1.DrawMode = [System.Windows.Forms.DrawMode]::OwnerDrawFixed

# 获取AD用户,包含需要的状态属性
$users = Get-ADUser -Filter * -Properties Name, Enabled, PasswordNeverExpires
# 将用户对象添加到ComboBox,指定显示Name属性
$comboBox1.DisplayMember = "Name"
foreach ($user in $users) {
    $comboBox1.Items.Add($user)
}

# 自定义DrawItem事件处理,设置字体颜色
$comboBox1.Add_DrawItem({
    param($sender, $e)
    
    # 绘制项的背景
    $e.DrawBackground()
    
    if ($e.Index -ge 0) {
        $user = $sender.Items[$e.Index]
        $textColor = [System.Drawing.Color]::Black # 默认黑色
        
        # 根据账户状态设置颜色
        if (-not $user.Enabled) {
            $textColor = [System.Drawing.Color]::LightGray # 禁用账户设为浅灰色
        } elseif ($user.PasswordNeverExpires) {
            $textColor = [System.Drawing.Color]::Blue # 密码永不过期设为蓝色
        }
        
        # 设置字体颜色并绘制文本
        $e.Graphics.DrawString($user.Name, $e.Font, [System.Drawing.Brushes]::FromSystemColor($textColor), $e.Bounds)
    }
    
    # 绘制项的焦点框
    $e.DrawFocusRectangle()
})

# 将ComboBox添加到窗体并显示
$form.Controls.Add($comboBox1)
$form.ShowDialog() | Out-Null

注意事项

  • 运行前确保已安装并导入ActiveDirectory模块(需RSAT工具支持)
  • 代码中DropDownStyle设为DropDownList是为了禁止用户手动输入,仅可选择列表项,若需允许输入可调整为其他样式
  • 颜色值可根据需求修改,比如用[System.Drawing.Color]::Gray替换浅灰色,或指定RGB值如[System.Drawing.Color]::FromArgb(0,0,255)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:13