将对象从 Format-Table 传输到 Export-CSV 会产生意外结果

将对象从 Format-Table 传输到 Export-CSV 会产生意外结果

我正在运行此命令来获取所有 Activesync 用户的列表并将其导出到 C:\activesync.csv

Get-ActiveSyncDevice | Get-ActiveSyncDeviceStatistics | sort-object status, devicetype , lastsyncattempttime | ft  FirstSyncTime   ,LastPolicyUpdateTime   ,LastSyncAttemptTime    ,LastSuccessSync , DeviceType , DeviceID, DeviceAccessState, Identity -a | Export-Csv c:\activesync.csv

问题是,如果我省略尾随的| c:\activesync.csv ...,则 CSV 数据与控制台显示不匹配,其中显示的数据和列不匹配。

这是 powershell 中的一个错误吗?

答案1

要记住的是,PowerShell 中的所有内容都是对象。使用 Format-Table 时,输出是格式化对象,这就是导出 CSV 时传递的内容。如果将 Format-Table 命令的结果通过管道传输到 Get-Member,您就会明白我的意思。

Get-ActiveSyncDevice | 
  Get-ActiveSyncDeviceStatistics | 
  sort-object status, devicetype , lastsyncattempttime | 
  Format-Table FirstSyncTime   ,LastPolicyUpdateTime   ,LastSyncAttemptTime    ,LastSuccessSync , DeviceType , DeviceID, DeviceAccessState, Identity -a | 
  Get-Member

其输出将是一系列各种格式对象的描述。

Format-Table 非常适合在控制台会话中创建输出或将格式化的输出发送到文本文件(使用 out-file),但如果我们将 Format-Table 更改为 Select-Object,您的 CSV 文件将更符合您的预期。

Get-ActiveSyncDevice | 
  Get-ActiveSyncDeviceStatistics | 
  sort-object status, devicetype , lastsyncattempttime | 
  select  FirstSyncTime   ,LastPolicyUpdateTime   ,LastSyncAttemptTime    ,LastSuccessSync , DeviceType , DeviceID, DeviceAccessState, Identity | 
  Export-Csv c:\activesync.csv

(旁注...对于长管道,管道字符可以用作行延续。)

相关内容