Objetos de tubulação de Format-Table para Export-CSV tem resultados inesperados

3

Estou executando este comando para obter uma lista de todos os usuários do Activesync e exportá-los para 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

O problema é que os dados CSV não correspondem à exibição do console se eu omitir o | c:\activesync.csv ... final em que os dados e colunas exibidos não correspondem.

Isso é um bug no powershell?

    
por random65537 19.09.2012 / 21:08

1 resposta

3

A coisa a lembrar é que tudo no PowerShell é um objeto. Quando você usa Format-Table, a saída é um objeto de formatação e é isso que está sendo transmitido para exportar CSV. Se você canalizar os resultados do comando Format-Table para Get-Member, verá o que quero dizer.

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

A saída disso será uma série de descrições de vários objetos de formatação.

Format-Table é ótimo para criar saída em sua sessão de console ou enviar saída formatada para um arquivo de texto (usando out-file), mas se mudarmos a Format-Table para Select-Object, o arquivo CSV será mais o que você espera.

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

(Nota lateral .. para pipelines longas, o caractere pipe pode ser usado como uma continuação de linha.)

    
por 19.09.2012 / 21:45