如何将PowerShell foreach循环结果按指定表格格式输出到文本文件
问题:PowerShell循环输出AD用户表格到文件的格式调整
问题场景
原本尝试通过PowerShell foreach循环查询Active Directory用户列表,将结果以表格格式写入文本文件,但最初仅显示第一个用户信息;调整后能遍历所有用户,但输出格式不符合预期,需要优化为统一提示语+单表头+所有用户数据的格式。
最初输出(仅显示第一个用户)
Name SamAccountName UserPrincipalName ---- -------------- ----------- Greg Gre.b87 Greg.b87@fs.com
当前使用的Ansible代码
- name: Run script ansible.windows.win_powershell: script: | [CmdletBinding()] param ( [array] $namelist ) foreach ($name in $namelist) { $results = Get-ADUser -Filter "SamAccountName -eq '$name'" -Properties whenCreated | Select Name,SamAccountName,UserPrincipalName echo "User Creation Successful:" echo "$results" $results | Format-Table -AutoSize | Out-File -FilePath C:\AD.txt -Width 5000 } parameters: namelist: "{{ hostvars.localhost.name_list[1:] }}"
更新后的输出(格式不符合预期)
Name SamAccountName whenCreated ---- -------------- ----------- Greg Gre.b87 2/5/2023 8:12:47 AM User Creation Successful: Gre.b87 Zee zeef.cd 2/5/2023 8:12:53 AM User Creation Successful: zeef.cd Dawn Dawn.5y 2/5/2023 8:13:00 AM User Creation Successful: Dawn.5y
期望输出格式
User creation successful: Name SamAccountName whenCreated ---- -------------- ----------- Greg Gre.b87 2/5/2023 8:12:47 AM Zee zeef.cd 2/5/2023 8:12:53 AM Dawn Dawn.5y 2/5/2023 8:13:00 AM
解决方案
修改PowerShell脚本逻辑,先收集所有用户数据,再统一输出提示语和表格,避免循环中重复写入导致的格式混乱:
修改后的Ansible代码
- name: Run script ansible.windows.win_powershell: script: | [CmdletBinding()] param ( [array] $namelist ) # 初始化数组存储所有用户查询结果 $allUserResults = @() foreach ($name in $namelist) { # 查询目标用户信息,指定需要的属性 $userInfo = Get-ADUser -Filter "SamAccountName -eq '$name'" -Properties whenCreated | Select-Object Name, SamAccountName, whenCreated # 将当前用户信息添加到数组 $allUserResults += $userInfo } # 输出统一提示语 Write-Host "User creation successful:" # 将所有用户数据统一格式化为表格,同时输出到控制台和写入文件 $allUserResults | Format-Table -AutoSize | Tee-Object -FilePath C:\AD.txt -Width 5000 parameters: namelist: "{{ hostvars.localhost.name_list[1:] }}"
关键修改点说明
- 收集所有数据再统一处理:用数组
$allUserResults存储所有用户的查询结果,避免循环中多次写入文件导致表头重复、提示语频繁出现的问题。 - 统一输出提示语:提示语只在表格上方输出一次,符合预期格式。
- 优化输出方式:使用
Tee-Object同时将表格内容输出到控制台和写入文件,如果不需要控制台输出,替换为Out-File -FilePath C:\AD.txt -Width 5000即可。 - 避免格式混乱:一次性对所有数据执行
Format-Table,确保仅生成一次表头,所有用户数据在同一表格内展示。
内容的提问来源于stack exchange,提问作者Whaily
相关产品推荐
相关产品推荐

