不,我不能使用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
但这会延续并扩展我不想扩展的属性。
如果这不是解决这个问题的最佳方法,我绝对愿意接受有用且可行的建议!
提前致谢!
答案 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
的情况下使用分隔符。