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

