如何用PowerShell哈希表实现AD用户组查询时非成员显示NULL
问题解决:修改PowerShell脚本实现指定组判断与NULL显示
修改思路
原脚本在用户不属于目标组时,Value列会显示为空,我们需要添加判断逻辑:当没有匹配到目标组时,将Value设为字符串NULL;若匹配到组,则保留组名(多个组用逗号分隔)。
修改后的脚本
# 若需获取多个用户,可将-identity参数替换为-filter *或其他筛选条件 $cyberarkAccounts = Get-ADUser -Identity users01 -Properties samaccountname, enabled, memberof $cyberarkAccountTable = @{} foreach ($account in $cyberarkAccounts) { # 获取用户所属的目标组 $matchedGroups = $account.MemberOf | ForEach-Object { (Get-ADGroup $_).sAMAccountName } | Where-Object { $_ -eq 'apps users' -or $_ -eq 'apps test users' } # 根据匹配结果赋值:无匹配则设为NULL,有匹配则拼接组名 if (-not $matchedGroups) { $cyberarkAccountTable[$account.samaccountname] = 'NULL' } else { $cyberarkAccountTable[$account.samaccountname] = $matchedGroups -join ', ' } } # 格式化输出结果 $cyberarkAccountTable | Format-Table -AutoSize
关键改动说明
- 新增空值判断:通过
if (-not $matchedGroups)检查是否匹配到目标组,未匹配时直接赋值字符串NULL,替代原逻辑的空值输出。 - 多组格式处理:使用
-join ', '将多个匹配到的组名转为逗号分隔的字符串,与期望输出格式一致。 - 匹配条件优化:将原
-like改为精确匹配的-eq(若组名固定),避免模糊匹配带来的意外结果;若组名存在变体,可保留-like并调整通配符。
验证输出
修改后执行脚本,输出将符合期望:
Name Value ---- ----- Users01 NULL Users02 apps users Users03 apps users, apps test users
内容的提问来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

