You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:46:04