我有两个格式相同的文件,一个包含目标IP地址和URL,另一个只包含目标IP地址。我正在尝试编写一个powershell脚本,以便在目标IP地址相等的情况下将第一个文件中的URL字段添加到该行的第二个文件中。以下是两个文件的示例:
包含网址的文件:
Date;Time;Source;Destination;Port;User;URL
3/7/2016;0:00:07;168.254.25.6;10.0.1.27;80;jsmith;abcnet
将网址添加到的文件:
Date;Time;Source;Destination;Port;User;URL
3/7/2016;0:00:09;168.254.25.6;10.0.1.27;80;;
每当我运行下面的代码时,它似乎陷入无限循环,因为它没有运行完成,但它不会抛出任何错误。我的数据集长达数千行,但是当我用一个只有几行的样本集进行测试时它就可以工作。
$noURLs = Import-Csv C:\Path\to\noURLs.csv
$containsURLs = Import-Csv C:\Path\to\containsURLs.csv | Select-Object Destination, URL
$outputFile = "C:\Path\to\output.csv"
if(Test-Path $outputFile){
Remove-Item $outputFile
}
foreach($line in $noURLs){
$cpDest = $line.Destination
$destURL = $containsURLs | Where-Object {$_.Destination -eq $cpDest} | Select-Object -ExpandProperty URL | Select-Object -Unique
if($destURL -ne $null){
if( $destURL.Count -gt 1) {
$destURL = $destURL -join ';'
}
}
$line.URL = $destURL
}
$noURLs | Export-Csv $outputFile
答案 0 :(得分:0)
我忘了在我的select对象中添加一个非唯一的开关,所以对于第一个csv中的每一条记录,它都循环遍历第二个csv的每一行。固定代码如下所示:
$ noURLs = Import-Csv C:\ Path \ to \ noURLs.csv $ containsURLs = Import-Csv C:\ Path \ to \ containsURLs.csv | Select-Object -Unique Destination,URL $ outputFile =“C:\ Path \ to \ _ output.csv”
if(Test-Path $ outputFile){ Remove-Item $ outputFile }
foreach($ line in $ noURLs){ $ cpDest = $ line.Destination $ destURL = $ containsURLs | Where-Object {$ _。Destination -eq $ cpDest} | Select-Object -ExpandProperty URL | Select-Object -Unique
if($destURL -ne $null){
if( $destURL.Count -gt 1) {
$destURL = $destURL -join ';'
}
}
$line.URL = $destURL
}
$ noURLs | Export-Csv $ outputFile -NoTypeInformation