如何将Get-ADGroupMember结果导出为指定格式的单行文本文件?
解决方案
这里是修正后的PowerShell脚本,解决了结果截断问题,并且能生成符合要求的文本文件:
# 定义要查询的AD组(可根据需求修改过滤条件) $adGroups = Get-ADGroup -Filter "Name -like 'humdrives'" # 存储生成的组内容行 $outputLines = @() foreach ($group in $adGroups) { # 获取递归成员的SAMAccountName,仅保留用户对象 $memberSams = Get-ADGroupMember -Identity $group -Recursive | Where-Object { $_.objectClass -eq 'user' } | Select-Object -ExpandProperty sAMAccountName # 拼接成符合要求的行格式:Group 组名 SAM1 SAM2 ... $line = "Group $($group.Name) $($memberSams -join ' ')" $outputLines += $line } # 定义底部固定静态内容 $staticContent = @" 固定静态文本: Include this text as static Include this text also Include this text as well ########################## "@ # 合并内容并写入目标文件(替换为你的实际文件路径) $outputLines + $staticContent | Out-File -FilePath "C:\Your\Target\Path\LicenseAssignments.txt" -Encoding UTF8
关键改进说明:
- 解决结果截断:放弃用
PSCustomObject存储数组形式的成员,直接将所有成员账号用空格拼接成字符串,彻底避免PowerShell默认输出时对数组的截断显示。 - 匹配格式要求:直接构造每行的文本结构,严格遵循
Group 组名 成员账号的单行格式。 - 整合静态内容:通过Here-String定义固定文本,最后和组内容合并后一次性写入文件。
- 过滤冗余对象:增加
Where-Object { $_.objectClass -eq 'user' },避免把嵌套的AD组当作成员输出(不需要的话可删除该行)。 - 编码兼容:指定
-Encoding UTF8确保文件编码通用,避免乱码问题。
内容的提问来源于stack exchange,提问作者DuhMan
相关产品推荐
相关产品推荐

