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

PowerShell脚本输出至DataGridView问题及自定义列需求

解决PowerShell中AD用户组绑定DataGridView无显示及自定义列问题

问题分析

当前代码存在几个关键问题导致DataGridView无内容:

  • 错误地用双引号包裹数组变量,将数组转成了单个字符串,ItemsSource需要集合类型而非字符串
  • 拼写错误:ItemSource应为ItemsSource(缺少字母s)
  • 未预先定义DataGridView的列,无法正确映射数据并显示自定义列名

修复步骤及代码

1. 预先定义自定义列

先给DataGridView添加一列,设置列头为所属组(对应原需求“Member Of”的中文翻译):

# 创建自定义列并添加到DataGridView
$groupColumn = New-Object System.Windows.Forms.DataGridViewTextBoxColumn
$groupColumn.HeaderText = "所属组"
$groupColumn.DataPropertyName = "GroupName" # 需与后续绑定对象的属性名对应
$var_DataGridView.Columns.Add($groupColumn)

2. 修正下拉框选择事件代码

将数组转为包含对应属性的对象集合,同时修正拼写错误,去掉不必要的双引号:

$var_comboBox.Add_SelectionChanged({
    $item = $var_comboBox.SelectedItem.Content

    switch ($item) {
        "domain1" {
            $var_DataGridView.ItemsSource = $domain1Groups | ForEach-Object {
                [PSCustomObject]@{ GroupName = $_ }
            }
        }
        "domain2" {
            $var_DataGridView.ItemsSource = $domain2Groups | ForEach-Object {
                [PSCustomObject]@{ GroupName = $_ }
            }
        }
        "domain3" {
            $var_DataGridView.ItemsSource = $domain3Groups | ForEach-Object {
                [PSCustomObject]@{ GroupName = $_ }
            }
        }
    }
})

3. 优化AD组获取代码(可选)

可以直接在获取AD组时生成对象集合,后续绑定无需再次转换:

$domain1Groups = (Get-ADUser -Identity $var_userName.Text -Server domain1 -Properties MemberOf).MemberOf | ForEach-Object {
    [PSCustomObject]@{ GroupName = $_ -Replace 'CN=', '' -Replace ',.*', '' }
}
# domain2、domain3的获取代码同理修改

之后绑定可直接执行:$var_DataGridView.ItemsSource = $domain1Groups

关键要点

  • DataGridView的ItemsSource需要绑定对象集合,而非纯字符串数组,这样才能与自定义列的DataPropertyName匹配
  • 确保列的DataPropertyName和绑定对象的属性名完全一致
  • 注意属性名拼写:ItemsSource是正确的属性名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:40:02