如何在WPF的PowerShell项目中将数组输出正确显示在ListBox中
解决WPF ListBox正确显示AD用户SamAccountName的问题
方法1:添加属性值而非对象
你当前添加的是Select SamAccountName返回的自定义对象,ListBox默认会显示对象的类型信息。直接提取对象的SamAccountName属性值添加到ListBox即可:
function SearchDGUserClick { param($sender, $e) $query = $DGUserSearchText.Text $UserSearch = Get-ADUser -Filter "Name -like '*$query*'" | Select SamAccountName | Sort -Property SamAccountName foreach ($item in $UserSearch) { # 直接添加SamAccountName属性值 $DGMemberSearchListBox.Items.Add($item.SamAccountName) } }
方法2:正确配置DisplayMember(推荐用于后续扩展)
如果后续需要保留对象的其他属性,可通过DisplayMember指定显示的属性名。注意要确保设置DisplayMember的ListBox变量名正确(你代码里用的是$DGMemberSearchListBox,而非之前提到的$ListBoxLeft),且在添加项前配置:
function SearchDGUserClick { param($sender, $e) $query = $DGUserSearchText.Text $UserSearch = Get-ADUser -Filter "Name -like '*$query*'" | Select SamAccountName | Sort -Property SamAccountName # 先设置DisplayMember,确保变量名是你的目标ListBox $DGMemberSearchListBox.DisplayMember = "SamAccountName" # 清空原有项(可选,避免重复添加) $DGMemberSearchListBox.Items.Clear() foreach ($item in $UserSearch) { $DGMemberSearchListBox.Items.Add($item) } }
方法3:用ExpandProperty直接获取字符串数组
通过Select-Object -ExpandProperty直接提取SamAccountName的字符串值,一次性添加到ListBox,效率更高:
function SearchDGUserClick { param($sender, $e) $query = $DGUserSearchText.Text # 用ExpandProperty直接得到字符串数组 $UserSearch = Get-ADUser -Filter "Name -like '*$query*'" | Sort -Property SamAccountName | Select-Object -ExpandProperty SamAccountName $DGMemberSearchListBox.Items.Clear() # 一次性添加所有项 $DGMemberSearchListBox.Items.AddRange($UserSearch) }
关键说明
Select SamAccountName返回的是带有单一属性的自定义对象,而非纯字符串,这是ListBox显示对象格式的核心原因。- 若后续需要操作用户对象的其他属性(如DistinguishedName),优先用方法2,保留对象的完整信息;若仅需显示名称,方法1和3更简洁。
内容的提问来源于stack exchange,提问作者Kevlar
相关产品推荐
相关产品推荐

