Powershell 循环浏览csv将内容与数组进行比较,然后将内容添加到csv

Powershell 循环浏览csv将内容与数组进行比较,然后将内容添加到csv,powershell,powershell-3.0,Powershell,Powershell 3.0,我不知道如何将字符串附加到CSV。我在做什么: 我有两个csv文件。一个是主机名和id列表,另一个是主机名和一些数字列表。 示例文件1: 主机名| ID IWBW14004 | 3673234 IWBW130023 | 2335934 IWBW120065 | 1350213 示例文件2: 服务代码|主机名| ID 4 | IWBW120065 | 4 | IWBW14004 | 4 | IWBW130023| 现在我以二维数组读取文件1的内容: $pcMatrix = @(,@()) Impo

我不知道如何将字符串附加到CSV。我在做什么: 我有两个csv文件。一个是主机名和id列表,另一个是主机名和一些数字列表。 示例文件1: 主机名| ID
IWBW14004 | 3673234
IWBW130023 | 2335934
IWBW120065 | 1350213

示例文件2:
服务代码|主机名| ID
4 | IWBW120065 |
4 | IWBW14004 |
4 | IWBW130023|

现在我以二维数组读取文件1的内容:

$pcMatrix = @(,@())
Import-Csv $outputFile |ForEach-Object {
    foreach($property in $_.PSObject.Properties){
        $pcMatrix += ,($property.Value.Split(";")[1],$property.Value.Split(";")[2])
    }
}
然后我读取文件2的内容,并将其与我的数组进行比较:

Import-Csv $Group".csv" | ForEach-Object {
    foreach($property in $_.PSObject.Properties){
        for($i = 0; $i -lt $pcMatrix.Length; $i++){
            if($pcMatrix[$i][0] -eq $property.Value.Split('"')[1]){
                #Add-Content here
            }
        }
    }
}
要将$pcMatrix[$I][1]附加到行ID中文件2中的活动列,我需要做什么

谢谢你的建议


Yanick

看来你把这项任务复杂化了

如果我理解正确,您希望使用与文件1中正确主机名对应的ID填充文件2中的ID列。最简单的方法是将第一个文件中的所有值填充到哈希表中,并使用该哈希表查找第二个文件中每一行的ID:

# Read the first file and populate the HashTable:
$File1 = Import-Csv .\file1.txt -Delimiter "|"
$LookupTable = @{}
$File1 |ForEach-Object {
    $LookupTable[$_.Hostname] = $_.ID
}

# Now read the second file and update the ID values:
$File2 = Import-Csv .\file2.txt -Delimiter "|"
$File2 |ForEach-Object {
    $_.ID = $LookupTable[$_.Hostname]
}

# Then write the updated rows back to a new CSV file:
$File2 | Export-CSV -Path .\file3.txt -NoTypeInformation -Delimiter "|"

看来你把这项任务复杂化了

如果我理解正确,您希望使用与文件1中正确主机名对应的ID填充文件2中的ID列。最简单的方法是将第一个文件中的所有值填充到哈希表中,并使用该哈希表查找第二个文件中每一行的ID:

# Read the first file and populate the HashTable:
$File1 = Import-Csv .\file1.txt -Delimiter "|"
$LookupTable = @{}
$File1 |ForEach-Object {
    $LookupTable[$_.Hostname] = $_.ID
}

# Now read the second file and update the ID values:
$File2 = Import-Csv .\file2.txt -Delimiter "|"
$File2 |ForEach-Object {
    $_.ID = $LookupTable[$_.Hostname]
}

# Then write the updated rows back to a new CSV file:
$File2 | Export-CSV -Path .\file3.txt -NoTypeInformation -Delimiter "|"

谢谢你的建议。您的解决方案要简单得多。我已经测试过了,但是导出CSV部分似乎有问题。生成的导出仅包含有关$File2对象的信息(例如,计数值、长长度值、IsReadOnly值…),我需要更改什么?Export Csv-Path。\test.Csv-InputObject$File2-NoTypeInformation-Delimiter“|”更新了示例,如果将
$File2
管道传输到Export Csv cmdlet,将枚举行/对象,并且您应该会看到一个正确的Csv文件outputyes,管道解决方案非常有效!非常感谢你!谢谢你的建议。您的解决方案要简单得多。我已经测试过了,但是导出CSV部分似乎有问题。生成的导出仅包含有关$File2对象的信息(例如,计数值、长长度值、IsReadOnly值…),我需要更改什么?Export Csv-Path。\test.Csv-InputObject$File2-NoTypeInformation-Delimiter“|”更新了示例,如果将
$File2
管道传输到Export Csv cmdlet,将枚举行/对象,并且您应该会看到一个正确的Csv文件outputyes,管道解决方案非常有效!非常感谢你!