在Powershell中导入和修改多个CSV文件
问题描述:
提前致谢。我试图导入多个.csv档案来,添加一列给他们,然后写该列基于其他列的值在Powershell中导入和修改多个CSV文件
我想要做的就是按照这样的逻辑:
- 遍历的CSV
- 对于每个CSV:
- 添加新栏
- 找一些话。
- 如果你看到的话,在新列写不同的字
- 结束循环
- 结束循环
我的代码如下:
Function getTag ([string]$vuln){
if($vuln -like "adobe-apsb-")
{return "Adobe Flash"}
if($vuln -like "jre-")
{return "Java"}
else
{return "No vulnerability code available"}
}
$in = "D:\Splunk\Inbound"
$out = 'D:\Splunk\Outbound'
Get-ChildItem $in -Filter *.csv |
ForEach-Object{
Import-Csv $_ | Select-Object *,@{Name='Tag';Expression={getTag $_.'Vulnerability ID'}} | Export-Csv $_.Name
}
现在,$ _以字符串形式出现,而不是CSV,我相信这是我的问题。有没有人有一个好的方法来访问嵌套循环内的csv文件?
答
- 使用-like的问题是缺少通配符。
- 我猜Outbound文件夹应该包含修改后的csv?
- 这些无穷无尽的命令行是不必要的,无论是在 脚本还是在shell中。
对我来说这是更好的可读性(和它的作品)。
Function getTag ([string]$vuln){
if ($vuln -like "adobe-apsb-*")
{return "Adobe Flash"}
if ($vuln -like "jre-*")
{return "Java"}
else
{return "No vulnerability code available"}
}
$in = "D:\Splunk\Inbound"
$out = "D:\Splunk\Outbound\"
Get-ChildItem $in -Filter *.csv |
ForEach-Object{
Import-Csv $_.FullName |
Select-Object *,@{
Name='Tag';
Expression={getTag $_.'Vulnerability ID'}
} | Export-Csv -path $($out+$_.Name) -notype
}
> tree . /f │ ├───Inbound │ test.csv │ └───Outbound test.csv > gc .\Inbound\test.csv "A","Vulnerability ID","C" 0,"adobe-apsb-blah",2 5,"jre-trash",9 > gc .\Outbound\test.csv "A","Vulnerability ID","C","Tag" "0","adobe-apsb-blah","2","Adobe Flash" "5","jre-trash","9","Java"
+0
这是什么语言? –
+0
上半部分是相同的PowerShell,下面是简单的控制台屏幕副本。 – LotPings
''进口-CSV $ _ FullName''? – 4c74356b41
看起来你需要移动| export-csv到你的管道的末端,而不是把它放在循环中。 –
Import-Csv $ _。FullName解决了它。感谢大家! –