将分隔符添加到Out-File

时间:2017-08-01 18:18:36

标签: powershell

不,我不能使用Export-CSV。 =)

问题:如何在使用Out-File时添加自定义列分隔符?

原因:我本质上有一个多线程PowerShell脚本,可以将信息导出到文件中。使用Out-File是有效的,因为它不会锁定文件,也不需要按顺序排列。但是,我需要能够最终在Excel中打开它。我的想法是以某种方式使用带有特殊分隔符的Out-File导出数据,以便我可以在excel中打开它。

我已经研究了一个多小时,我的每一个类似的问题都被解决了#34;有人说要使用我不能做的Export-CSV

我试过的一些事情

foreach($item in $info){
New-Object -TypeName PSCustomObject -Property @{
FolderName = "$($item.Feature1) #"
Owner = "$($item.Feature2) #"
AccessRights = "$($item.Feature3) #"
} | ft -hide | Out-File C:\Test.txt

使用#作为特殊分隔符,但会留下一百万个空行。

我也尝试过类似的事情:

| Select Feature1, Feature2, Feature3 | %{"$($_.Feature1)#", "$($_.Feature2)#", $_.Feature3} | out-file C:\Test.txt -Force -Append 

但这会延续并扩展我不想扩展的属性。

如果这不是解决这个问题的最佳方法,我绝对愿意接受有用且可行的建议!

提前致谢!

2 个答案:

答案 0 :(得分:2)

一种方法是为每个线程导出csv文件 - 使用诸如"temp_{0}.csv" -f [Guid]::NewGuid().Guid之类的唯一文件名来防止冲突。线程完成后,执行以下操作:

Get-ChildItem temp_*.csv |
  ForEach-Object { Import-Csv $_.FullName } |
  Export-Csv BigOutputFile.csv -NoTypeInformation

确保Get-ChildItem文件名规范不与输出文件名规范冲突。然后删除temp_*.csv

答案 1 :(得分:0)

跳到我脑海中的解决方案有点复杂,但可行。通过foreach循环运行代码并创建一个字符串数组。在每个字符串中经过foreach循环时添加分隔符,然后输出数组。

这样您就可以在不使用export-csv的情况下使用分隔符。