如何在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
相关产品推荐
相关产品推荐

