Ken's PowerShell blog has an entry Remote Services and PowerShell where he wrote a function to get services from a remote machine using WMI. He formatted the data using FT (format-table) and then went on to export the data to CSV. He pointed out that the following would NOT work
rget-service remotemachinename netlogon | ft -autosize name,startmode,state,status,startname | export-csv services.csv
Instead you should use:
rget-service remotemachinename netlogon | Select-Object name,startmode,state,status,startname | export-csv services.csv
Let's take a minute to explore why the first command does not work. Let's replace the Export-CSV with a Get-Member and see what we get:
Ps> rget-service remotemachinename netlogon | ft -autosize name,startmode,state,status,startname | Get-Member –MemberType Property TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartDataName MemberType Definition---- ---------- ----------autosizeInfo Property Microsoft.PowerShell....ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId...groupingEntry Property Microsoft.PowerShell....pageFooterEntry Property Microsoft.PowerShell....pageHeaderEntry Property Microsoft.PowerShell....shapeInfo Property Microsoft.PowerShell.... TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartDataName MemberType Definition---- ---------- ----------ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId...groupingEntry Property Microsoft.PowerShell....PitnshapeInfo Property Microsoft.PowerShell.... TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryDataName MemberType Definition---- ---------- ----------ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId...formatEntryInfo Property Microsoft.PowerShell....outOfBand Property System.Boolean outOfB...writeErrorStream Property System.Boolean writeE... TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupEndDataName MemberType Definition---- ---------- ----------ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId...groupingEntry Property Microsoft.PowerShell.... TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEndDataName MemberType Definition---- ---------- ----------ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId...groupingEntry Property Microsoft.PowerShell....
What you are seeing is that Format-Table transforms the objects into a stream of formatting directives. These are then consumed by one of the OUT- Commands (Out-Host, Out-File, Out-String, Out-Printer). This is why you can't pipe format-table to export-csv.
Enjoy!
Jeffrey Snover [MSFT]Windows PowerShell/MMC ArchitectVisit the Windows PowerShell Team blog at: http://blogs.msdn.com/PowerShellVisit the Windows PowerShell ScriptCenter at: http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx