通过powershell修改CSV的每一行

时间:2013-02-21 19:46:23

标签: powershell powershell-v3.0

我有一堆CSV文件,其中包含来自各种计算机的文件数据。它包括诸如文件哈希 - SHA1,MD5等信息。

集管
* MD5,SHA-1,SHA-256 *

示例数据 的 ecfc9af8d1a6e16223e1b17ea732fa08 ,1db05a7a663a0de3b4913bf57f55e81d2b7e3663,bf74e48e2f14dcba257473fccec3e512c7283335610205e3b84cb16449e86335

我的挑战是如何将0x附加到CSV文件中的每个SHA-1条目。我尝试过几件事,但似乎没什么用。我想要解决的另一个小问题是,一旦我将数据重新导出回CSV,数据就会在每个文件哈希中添加双引号。通常这不是问题,但在这种情况下,我想采用这些文件哈希并将它们从SQL DB中弹回。这就是我需要为每个条目添加0x以使其与现有哈希DB兼容的原因。

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

Import-Csv将为您提供一些方法:

Import-Csv .\samplehash.csv -Header MD5,SHA1,SHA256

产生如下输出:

MD5                                                     SHA1                                                    SHA256                                                
---                                                     -----                                                   -------                                               
ecfc9af8d1a6e16223e1b17ea732fa08                        1db05a7a663a0de3b4913bf57f55e81d2b7e3663                bf74e48e2f14dcba257473fccec3e512c7283335610205e3b84...
ecfc9af8d1a6e16223e1b17ea732fa08                        1db05a7a663a0de3b4913bf57f55e81d2b7e3663                bf74e48e2f14dcba257473fccec3e512c7283335610205e3b84...

现在将结果传递给foreach(%)以创建SQL字符串。

Import-Csv .\samplehash.csv -Header MD5,SHA1,SHA256 | 
%{ "insert into hashes(md5,sha1,sha256) values('0x{0}','0x{1}','0x{2}')" -f $_.MD5,$_.SHA1,$_.SHA256 }

现在使用Invoke-SqlCmd或类似字符串(取决于数据库系统)来插入行。

答案 1 :(得分:0)

使用Import-CSV导入CSV:

$csv = Import-CSV import.csv;

将0x添加到每个SHA-1:

$csv | %{ $_.{SHA-1} += '0x' };

使用第一个数据行的属性名创建标题行:

$header = @(,$csv[0].psobject.properties | %{,$_.name});

将条目转换为值数组而不是行对象:

$data = ($csv | %{,($_.psobject.properties | select -expand value)});

手动输出没有带引号字段的基本CSV:

( $header+$data | %{ $_ -join ',' }) -join "`r`n" | sc import.csv