获取AD组用户的Domain\User格式信息并导出CSV遇空输出求助
问题原因及修复方案
导致空输出的核心问题
- 变量拼写错误:最后导出时用了
$reult,但前面定义的是$result,变量名不匹配直接导致导出空内容。 - 未输出可捕获的对象:
foreach-object块内只用Write-Host打印内容,Write-Host仅输出到控制台,不会将数据存入$result变量,所以$result始终为空。 - 域名提取不完整:原正则仅提取第一个
DC=片段,无法获取完整域名(比如DC=contoso,DC=com会只得到contoso,正确域名应为contoso.com)。
修正后的脚本
# 获取目标AD组 $ADGroup = Get-ADGroup 'myadgroup1' # 递归获取组内所有成员(如需仅直接成员,移除-Recursive) $result = Get-ADGroupMember -Identity $ADGroup -Recursive | Where-Object { $_.objectClass -eq 'user' } | # 仅筛选用户对象,排除组、计算机等 ForEach-Object { # 从distinguishedName提取完整域名 $dcParts = [regex]::Matches($_.distinguishedName, 'DC=([^,]+)').Groups | Where-Object { $_.Success } | Select-Object -ExpandProperty Value | ForEach-Object { $_ -replace 'DC=' } $domain = $dcParts -join '.' # 拼接Domain\User格式 $domainUser = "$domain\$($_.SamAccountName)" # 输出自定义对象,供后续导出使用 [PSCustomObject]@{ GroupName = $ADGroup.Name DomainUser = $domainUser SamAccountName = $_.SamAccountName FullDomain = $domain } } # 导出到CSV文件 $result | Export-Csv ".\userinfo.csv" -NoTypeInformation -UseCulture
关键优化点说明
- 加入
Where-Object { $_.objectClass -eq 'user' }:过滤掉组内嵌套的其他组、计算机对象,仅保留用户。 - 修正域名提取逻辑:完整提取所有
DC=片段并拼接成标准域名格式。 - 输出
PSCustomObject:将需要的数据封装为对象,确保$result能捕获到有效数据,正常导出CSV。 - 可选
-Recursive参数:如需获取嵌套组内的用户,保留该参数;仅需直接成员则移除。
内容的提问来源于stack exchange,提问作者Madhusudan G J
相关产品推荐
相关产品推荐

