PowerShell中数组属性与自定义计算属性混用报错的解决问询
解决PowerShell中Select-Object混合数组属性与自定义计算属性的问题
问题原因
你猜的没错,问题确实出在混合传递数组($user_props)和单个哈希表($user_groups)给Select-Object。当你直接写Select-Object $user_props, $user_groups时,PowerShell会把整个$user_props数组当作一个参数值传递,而非将数组内的每个属性名单独拆解为参数,这就导致Select-Object无法识别这种数组类型的输入,从而触发报错。
解决方案
有两种简洁写法可以实现你的需求,不用逐个手动列出属性名:
方法1:合并属性数组与计算属性为新数组
将$user_props数组和$user_groups哈希表合并成一个新数组,再传递给Select-Object:
# User Props to select $user_props = @( 'Name', 'DistinguishedName', 'SamAccountName', 'Enabled', 'SID' ) # Get AD groups an AD user is a member of $user_groups = @{ label = 'GroupMemberships'; expression = { (Get-ADPrincipalGroupMembership -Identity $_.DistinguishedName).Name } } # 合并属性数组与计算属性 $select_props = $user_props + $user_groups # Get AD Users $users = Get-ADUser -Filter * -Property $user_props | Select-Object $select_props -ErrorAction Stop -ErrorVariable _error
方法2:使用数组展开运算符
在Select-Object的参数中,用数组展开语法将$user_props的元素逐个拆解,再追加$user_groups:
# User Props to select $user_props = @( 'Name', 'DistinguishedName', 'SamAccountName', 'Enabled', 'SID' ) # Get AD groups an AD user is a member of $user_groups = @{ label = 'GroupMemberships'; expression = { (Get-ADPrincipalGroupMembership -Identity $_.DistinguishedName).Name } } # Get AD Users $users = Get-ADUser -Filter * -Property $user_props | Select-Object $user_props*, $user_groups -ErrorAction Stop -ErrorVariable _error
或者用另一种展开写法:
$users = Get-ADUser -Filter * -Property $user_props | Select-Object @($user_props; $user_groups) -ErrorAction Stop -ErrorVariable _error
补充说明
Get-ADUser的-Property参数本身支持数组输入,你原来的-Property $user_props写法是完全没问题的。- 两种方法都能实现复用
$user_props数组、同时添加自定义计算属性的需求,选哪种全看个人习惯。
内容的提问来源于stack exchange,提问作者Zer0F8th
相关产品推荐
相关产品推荐

