首页 > 解决方案 > 将 Powershell 输出组合到单个 csv

问题描述

我将下面的 powershell 命令拼凑在一起,将作为安全组成员的服务器列表导出到 csv。我有许多生成自己的 csv 的命令。我不想有十几个 csv 文件,而是想生成一个包含两列、服务器名称和它所在的安全组的整体 csv。如何做到这一点?

Get-ADGroupMember -identity "SecGrp-123" -server "test.net" | select name | sort-object name | export-csv "SecGrp-123.csv" -NoTypeInformation
Get-ADGroupMember -identity "SecGrp-456" -server "test.net" | select name | sort-object name | export-csv "SecGrp-456.csv" -NoTypeInformation

标签: powershell

解决方案


我假设您正在寻找这样的东西:

Write-Output SecGrp-123, SecGrp-456 -PipelineVariable groupName | 
  ForEach-Object {
    Get-ADGroupMember -Identity $_ -Server test.net | Sort-Object Name
  } | 
      Select-Object Name, @{ n='Group'; e={ $groupName } } | 
        Export-Csv out.csv -NoTypeInformation

注意:以上按每个组的名称对服务器进行排序。如果要在所有组中按名称排序,请将调用移到Sort-Object Name调用之外ForEach-Object,并将其放在后者之后作为新的管道段。


如果Get-ADGroupMember接受组名字符串作为管道输入(我无法验证),您可以简化为:

Write-Output SecGrp-123, SecGrp-456 -PipelineVariable groupName | 
  Get-ADGroupMember -Server test.net | 
    Sort-Object Name |
      Select-Object Name, @{ n='Group'; e={ $groupName } } | 
        Export-Csv out.csv -NoTypeInformation

注意:这按所有组的服务器名称排序;要按组排序,请使用Sort-Object Group, Name,它也会按排序顺序列出组。


也可以看看:


推荐阅读