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

如何让PowerShell AD组查询脚本仅返回对应用户的启用状态?

问题描述

我尝试用代码@{n='Active';e={(Get-ADGroupMember $group | get-aduser -Properties enabled |select enabled).enabled}}读取用户的samaccountname并返回该用户的启用/禁用状态,但当前代码会返回组内所有成员的True/False值数组。我希望该列仅返回对应行用户的状态。

我的完整脚本如下:

$groups = "some","ad", "groups"

$results = foreach ($group in $groups) {
        Get-ADGroupMember  $group | select samaccountname, @{n='GroupName';e={$group}}, @{n='Description';e={(Get-ADGroup $group -Properties description).description}}, @{n='Active';e={(Get-ADGroupMember $group  | get-aduser -Properties enabled |select enabled).enabled}}
    }
    
$results

当前返回结果中,Active列显示的是组内所有成员的启用状态集合,而非当前行用户的单独状态。

解决方案

问题出在Active列的计算属性里:你重新查询了整个组的所有成员并获取他们的启用状态,所以返回的是一个数组,而不是当前行用户的状态。

正确的做法是利用管道对象$_指代当前遍历到的用户,直接查询该用户的Enabled属性:

@{n='Active';e={(Get-ADUser $_ -Properties Enabled).Enabled}}

另外可以优化Description列的查询——不要在每个用户的循环里重复查询组描述,提前在组循环里获取一次即可,提升脚本效率。

修正后的完整脚本
$groups = "some","ad", "groups"

$results = foreach ($group in $groups) {
    # 提前获取组的描述,避免重复查询
    $groupDesc = (Get-ADGroup $group -Properties Description).Description
    Get-ADGroupMember $group | Select-Object samaccountname, 
        @{n='GroupName';e={$group}}, 
        @{n='Description';e={$groupDesc}}, 
        @{n='Active';e={(Get-ADUser $_ -Properties Enabled).Enabled}}
}

$results

这样修改后,Active列就会显示对应行用户的单独启用/禁用状态(True/False),而不是整个组的状态数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:36:35