求助:编写Where-Object cmdlet筛选未加入指定组的AD组
解决PowerShell筛选未包含指定组作为所属组的AD组问题
原代码问题修正
你当前代码里的Format-Table Name会把Get-ADGroup返回的AD组对象转换成格式化输出对象,丢失了原有的属性(比如MemberOf),导致后续无法进行筛选判断,必须先去掉这一步,保留原始的AD组对象。
完整实现代码
# 指定要检查的目标组名称 $MissingGroupName = "gg-s-MissingGroup" # 获取目标组的唯一标识DistinguishedName(避免名称重复导致误判) $MissingGroupDN = (Get-ADGroup -Identity $MissingGroupName).DistinguishedName # 获取所有名称匹配规则的AD组,同时加载MemberOf属性(默认不返回该属性) $AllTargetGroups = Get-ADGroup -Filter 'Name -like "gg-s-*-Group"' -SearchBase "OU=xxxxxxx,DC=xxxxxxxxx,DC=xx" -Properties MemberOf # 筛选出MemberOf中不包含目标组的AD组 $GroupsWithoutMissingGroup = $AllTargetGroups | Where-Object { $_.MemberOf -notcontains $MissingGroupDN } # 按需输出结果,这里仅显示组名称 $GroupsWithoutMissingGroup | Format-Table Name
关键说明
- 必须加载
MemberOf属性:Get-ADGroup默认返回的属性集合里不包含MemberOf,需要通过-Properties MemberOf手动指定加载,才能判断组的所属关系。 - 用DistinguishedName判断:AD中组名称可能存在重复,但
DistinguishedName是每个对象的唯一标识,用它来匹配能避免误判。 - 避免提前格式化:
Format-*系列命令会改变对象类型,后续无法操作原对象的属性,所以要在筛选完成后再按需格式化输出。
内容的提问来源于stack exchange,提问作者cosmo_
相关产品推荐
相关产品推荐

