2017-08-01 9 views
1

いいえ、私はExport-CSVを使用できません。 =)アウトファイルに区切り文字を追加する

質問Out-Fileを使用するときにカスタム列区切り文字を追加するにはどうすればよいですか?

理由::私は本質的に、それをファイルにエクスポートする情報をプルするマルチスレッドPowerShellスクリプトを持っています。 Out-Fileを使用すると、ファイルがロックされず、何もする必要がないために機能します。しかし、私はExcelでこれを最終的に開くことができる必要があります。私の考えは、何とかデータをOut-Fileで特別な区切り文字を使ってエクスポートし、Excelで開くことができるようにすることです。

私は1時間以上にわたり研究してきましたが、私のことと同様の質問はすべて私がすることができない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 

しかし、それは通過し、私は拡大したくないプロパティを展開します。

これはこれを実行する最善の方法でない場合は、私は間違いなく有用かつ実現可能な提案にオープンしています!

ありがとうございます!

+1

「Export-CSV」を使用できないのはなぜですか?あなたは意図的に自分自身を制限し、理由なしに人生をもっと難しくしています – TheIncorrigible1

+1

ファイルに書き込むと、そのファイルは他のプロセスにロックされます。このファイルに複数のプロセスをランダムに入れても、 'Export-CSV'を使うことができます。 '-Append'スイッチを使って、オブジェクトを持っていればそれをエクスポートします。オブジェクトのエクスポートが完了すると、 'Export-CSV'はファイルを閉じて解放します。 –

+0

'Export-CSV'は数秒で失敗します。これが私が試した最初のものです。同時に実行されている10以上のスレッドから情報をエクスポートするためのより良い方法の提案を提供できる場合は、私はそれを聞いて嬉しいです。私はかなり長い間これに固執してきました。 – Nick

答えて

2

1つの方法は、スレッドごとに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を削除します。

+0

PowerShell 5に使用できる 'New-TemporaryFile'があります – BenH

+0

OPが' $ Env:Temp'に書き込まれるファイルに気にしない場合は可能でしょう。 –

+0

いつも@Bill_Stewartと同じように、あなたは素晴らしいです。これは完璧に機能しました、ありがとうございます! – Nick

0

私の頭に飛びつく解決策は少し畳み込まれていますが、うまくいくでしょう。 foreachループでコードを実行し、文字列の配列を作成します。 foreachループを通過するときに区切り文字を各文字列の中に追加し、配列を出力します。

これにより、export-csvを使用せずにデリミタを使用できるようになります。

関連する問題