Powershell 将分隔符添加到输出文件

Powershell 将分隔符添加到输出文件,powershell,Powershell,不,我不能使用导出CSV进行此操作。=) 问题:在使用文件时,如何添加自定义列分隔符 原因:我基本上有一个多线程PowerShell脚本将信息导出到文件中。使用Out File是有效的,因为它不锁定文件,也不需要按顺序排列。但是,我最终需要能够在Excel中打开它。我的想法是以某种方式使用带有特殊分隔符的Out File导出数据,以便在excel中打开它 我已经研究了一个多小时,每个与我类似的问题都被“解决”了,人们说我不能使用导出CSV 我尝试过的一些事情 foreach($item in $

不,我不能使用导出CSV进行此操作。=)

问题:在使用文件时,如何添加自定义列分隔符

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

我已经研究了一个多小时,每个与我类似的问题都被“解决”了,人们说我不能使用
导出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 
但这会通过并扩展我不希望扩展的属性

如果这不是最好的解决方法,我绝对愿意接受有益和可行的建议


提前谢谢

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


这将允许您在不使用
导出csv
的情况下使用分隔符,一种方法是为每个线程导出一个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

为什么不能使用
Export csv
?你故意限制自己,无缘无故地让生活变得更艰难。当你写入一个文件时,该文件被锁定到其他进程。如果您有多个进程“随机轮流”写入此文件,您仍然可以使用
导出CSV
;拥有对象后,使用
-Append
开关将其导出。导出对象后,
export CSV
关闭并释放文件。
export CSV
在几秒钟内失败,这是我尝试的第一件事。请如果你能提供一个更好的方法,从10+线程同时运行导出信息的建议,我非常高兴听到它。我在这方面已经坚持了很长一段时间。为每个线程输出单独的临时CSV文件,整体导入,导出到新的CSV文件,然后删除临时文件。@Bill_Stewart我没有想过这样做,但听起来很完美!今晚我要试一试。如果你想先发制人地发布你的评论作为答案,假设它对我有效,我明天会接受它。谢谢!:)PowerShell 5有
新的临时文件
,如果OP不介意将文件写入
$Env:Temp
,那么可能可以使用它。像往常一样@Bill\u Stewart,你太棒了。这非常有效,非常感谢!!这是一个合理的方法,但为了提高效率,我建议将
Get ChildItem temp.*.csv | ForEach对象{Import csv$..FullName}
更改为
Import csv(Get Item temp.*.csv)
。(从Windows PowerShell v5.1/PowerShell Core v6.0-beta.4开始,直接输出到导入Csv的管道
Get Item
/
Get ChildItem
无法工作,原因是存在错误。)