Get-ADUser在终端正常运行但PowerShell脚本中报错问题
问题解决:PowerShell脚本中获取AD用户组列表报错的替代方案
问题描述
在PowerShell 5.1终端直接执行以下命令时,可正常获取用户BlueF的AD组列表:
$members = @(((Get-ADUser -Identity BlueF -Properties MemberOf).MemberOf | Get-ADGroup).Name | Sort-Object)
但将该命令放入脚本执行时,触发错误:Cannot find an object with identity,提示无法找到指定身份的AD组。尝试过重启PowerShell、改用for循环遍历组对象等方式,均未解决问题。
解决方法
通过直接解析MemberOf属性的LDAP路径字符串,无需调用Get-ADGroup即可提取组名称,具体命令如下:
$members = @((((Get-ADUser -Identity $BlueF -Properties MemberOf).MemberOf) -replace '(.+?),.+','$1') -replace 'CN=','' | Sort-Object)
原理说明
MemberOf属性返回的是AD组的完整LDAP区分名(DN),格式类似CN=GroupName,OU=Groups,DC=domain,DC=com。通过两次正则替换:
- 第一次
-replace '(.+?),.+','$1'截取逗号前的部分,得到CN=GroupName - 第二次
-replace 'CN=',''移除CN=前缀,最终得到纯组名称
这种方式绕过了Get-ADGroup调用时可能出现的身份解析问题,直接从原始属性值中提取所需信息。
内容的提问来源于stack exchange,提问作者vylolawo
相关产品推荐
相关产品推荐

