好吧,我有这个数组,它本质上是一个CSV文件的Import-Csv
。数组中的每个对象都是整个CSV行。输入文件呈现正常,当我打开它用Excel(列是正确的)尝试使用powershell将数组导出到csv(数组对象是;分隔符并包含换行符)
这个CSV文件是逗号分隔,在下面的示例中的格式:
“第一”,“第二”,“这是所有
第三
柱”,‘第四’
我已经得到了我的脚本一切工作正常,除了FO r我需要将这个数组写入一个.csv文件的部分,格式正确。我一直有问题使用Out-File
,Export-Csv
,我甚至尝试过this,但它并没有给我正是我需要的东西。每个对象需要在csv文件中成为新行,只出现一次,并且必须遵守Excel的CSV文件呈现(即每列需要双引号和逗号分隔)。
我甚如此绝望,我想手动格式化这个事情正确地做这个:
$Array | % { $_ -replace "`"@`{","`n`"" } | % { $_ -replace "}`"","`"`n" } | % { $_ -replace "`;","`"`;`"" } | % { $_ -replace "Plugin ID=","" } | % { $_ -replace "CVE=","" } | % { $_ -replace "CVSS=","" } | % { $_ -replace "Risk=","" } | % { $_ -replace "Host=","" } | % { $_ -replace "Protocol=","" } | % { $_ -replace "Port=","" } | % { $_ -replace "Name=","" } | % { $_ -replace "Synopsis=","" } | % { $_ -replace "Solution=","" } | % { $_ -replace "Description=","" } | % { $_ -replace "Plugin Output=","" } | % { $_ -replace "`";`"","`",`"" } | Out-File "$dirResults\$Results-$Time.csv"
从本质上讲,我在这里做的几件事情:
- 从每个对象的末尾删除@ {从开始和}
- 将分隔符从;于,
- 将每列在双引号
- 卸下的columnHeader =从每个值
这里的开头是一个代码段:
$arrayHeader = @("Plugin ID;CVE;CVSS;Risk;Host;Protocol;Port;Name;Synopsis;Description;Solution;Plugin Output")
$OutterArrayException = Import-Csv "$dirExceptions\$FileException" -Delimiter ","
$InnerArrayScanMe = New-Object System.Collections.ArrayList
# This method keeps the arrays separate types
FOREACH ($Object in $OutterArrayScanMe)
{ $InnerArrayScanMe.Add("$Object") | Out-Null }
# Note that the OutterArrayException is an Import-Csv from a similarly formatted file as OutterArrayScanMe
FOREACH ($Exception in $OutterArrayException)
{ $InnerArrayScanMe.Remove("$Exception") }
# This method keeps the arrays separate types
$OutterArrayScanMe = @($arrayHeader) + @($InnerArrayScanMe)
$OutterArrayScanMe | Export-Csv "$dirResults\$FileScanMe-$startTime.csv" -Delimiter ";" -NoTypeInformation
UPDATE:
当我使用export-csv时,对象的新行将信息作为csv中的新行。因此,应该看起来像这样的东西变得非常混乱。
UPDATE2:
已经有什么格式的样子,这些问题都与格式什么的一些问题。为了解决这些问题,我在数组中包含了一个单独的对象来说明问题。请记住,在我的脚本中会发生什么是一个格式正确的CSV(具有多行等,并完美呈现)的import-csv,删除不必要的对象(使用$ array.Remove),然后转储到文件Out-File或Export-Csv)。如此简单,但这样的破碎...
例Array对象(OUT-文件):
@ {插件ID = #####; CVE = CVE - #### - ####; CVSS = ##。风险=中;主机= ### ### ### ###。。。;协议= XXX;端口= ##;名称= Microsoft ASP.NET xxx;概要=远程网络服务器使用的一个框架,其漏洞为
。;说明=在远程主机上运行的Web服务器似乎正在使用ASP.NET,并且可能受到漏洞的影响。
此外,有推测称,这个漏洞可能导致独角兽和彩虹 如果与物理访问机器 塞在一个攻击者;解决方案=使用魔术过滤器阻止淘气网站的请求。
hxxp://###.###.###.###/xxx/xxxxxxxxx
插件输出= Nessus的通过请求
以下网址接收的顽皮页或相关的错误消息}
例Array对象(出口-CSV):
#TYPE System.String
“长度”
“616”
什么是错的当你使用export-csv时它重新排列的方式? – mjolinor 2013-04-05 20:38:11
在Excel 2013中将其另存为CSV时,将以“;”分隔不是“,”和文本不总是在引号中(实际上从来没有当我尝试)。上面的示例是什么?它是“input.csv”吗?那么你修改它,导出它,并希望保持相同的格式(每行对象多行),或者你想删除换行符?请提供输出csv的示例。 – 2013-04-05 21:03:29
“第一”,“第二”,“这是全部 第三 列”,“第四” 是否所有新行? – 2013-04-06 03:20:40