将Powershell输出合并到单个csv

将Powershell输出合并到单个csv,powershell,Powershell,我拼凑了下面的powershell命令,将属于安全组的服务器列表导出到csv。我有许多命令可以生成自己的csv。我不希望有十几个csv文件,而是希望生成一个包含两列的csv,即服务器名称和它所在的安全组。如何做到这一点 Get-ADGroupMember -identity "SecGrp-123" -server "test.net" | select name | sort-object name | export-csv "SecGrp-1

我拼凑了下面的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

我想你在找这样的东西:

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
注意:这会在所有组中按服务器名称进行排序;要按组进行排序,请使用排序对象组,名称,它也将按排序顺序列出组


另见:

  • (PSv4+;别名
    -pv
    ),它将cmdlet的当前输出对象保存在给定名称的变量中,以供以后在下游cmdlet的脚本块中使用

  • ,用于在调用中定义
    属性的机制


您可以逐个运行命令,并将输出发送到单个文件。在Unix中,双gt符号(>>)将附加,其中单个(>)将覆盖,即
cat foo.txt>>bar.txt
@kometen,您不能简单地将多个CSV文件与
>
连接起来,因为每个文件都有一个标题行。在这种情况下,您当然必须忽略标题。实用程序head-and-tail和grep在这方面做得很好。这些是正在运行的Windows Powershell命令,而不是Unix。不过,这里我需要的重要一点是在电子表格中捕获服务器名称旁边的安全组名称,即第1行将有VM001、SecGrp-123;第2行有VM002;SecGrp-123;第三排有VM100、SecGrp-456等,效果非常好,谢谢!我注释掉了第2行和第4行,但它生成了一个空的out.csv文件。如果我想用域名(test.net、dev.net、prod.net)添加第三列(&final!)并将结果文件附加到一列中,也可以这样做吗?感谢您的检查:您不能只注释第4行,因为在
Get ADGroupMember
调用之后,您将丢失一个
,然后,
Select Object
调用启动一个新管道;由于新管道没有输入,
Export Csv
会创建一个空文件。您可以简单地将另一个计算属性添加到
Select Object
调用中,例如
@{n='Domain';e={'test.net'}
——但这会对域名进行硬编码。其他名称从何而来?您可以使用带有多个命令的单个管道,使用以下习惯用法创建单个输出文件:
&{;}| Export Csv…