如何在PowerShell中将多组ADSyncTools结果导出为单个CSV表格
在PowerShell中合并ADSyncToolsRunstepHistory查询结果并导出为CSV
优化思路
原代码多次重复调用Get-ADSyncToolsRunstepHistory,效率偏低。我们可以合并查询条件,一次性获取所有目标记录,统一处理后导出为单个CSV文件。
实现代码
# 一次性获取所有符合条件的历史记录,合并匹配规则并按类型分组取前2条 $mergedHistory = Get-ADSyncToolsRunstepHistory | Where-Object { $_.RunProfileName -match "Delta Import|Delta Synchronization|Full Import|Full Synchronization" } | Group-Object -Property RunProfileName | ForEach-Object { $_.Group | Select-Object -Index 0, 1 } | Select-Object @{N='ServerName';E={"$env:COMPUTERNAME"}} ,StartDate, EndDate, ConnectorName, RunProfileName, StepResult # 导出到指定路径的CSV文件,路径可自行修改 $mergedHistory | Export-Csv -Path "C:\ADSync_Run_History.csv" -NoTypeInformation -Encoding UTF8
代码说明
- 合并查询条件:用正则表达式一次性匹配所有需要的RunProfileName类型,避免重复调用
Get-ADSyncToolsRunstepHistory,提升执行效率。 - 分组取前2条:通过
Group-Object按RunProfileName分组,再对每组单独取前2条记录,和原代码的Select-Object -Index 0,1效果一致。 - 导出配置:
-NoTypeInformation避免CSV头部添加冗余的类型信息,-Encoding UTF8确保文件在不同环境下的编码兼容性。
简化管道写法
如果不需要保留中间变量,也可以直接用管道串联完成所有操作:
Get-ADSyncToolsRunstepHistory | Where-Object { $_.RunProfileName -match "Delta Import|Delta Synchronization|Full Import|Full Synchronization" } | Group-Object -Property RunProfileName | ForEach-Object { $_.Group | Select-Object -Index 0, 1 } | Select-Object @{N='ServerName';E={"$env:COMPUTERNAME"}} ,StartDate, EndDate, ConnectorName, RunProfileName, StepResult | Export-Csv -Path "C:\ADSync_Run_History.csv" -NoTypeInformation -Encoding UTF8
内容的提问来源于stack exchange,提问作者hacrks
相关产品推荐
相关产品推荐

