powershell - 将 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
解决方案
我假设您正在寻找这样的东西:
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
,它也会按排序顺序列出组。
也可以看看:
通用
-PipelineVariable
参数( PSv4 +; alias-pv
),它将 cmdlet 的当前输出对象保存在给定名称的变量中,以供以后在下游 cmdlet 的脚本块中使用。计算属性,用于
Group
在Select-Object
调用中定义属性的机制。