Powershell在arraylist中找到了价值

时间:2017-10-27 08:57:30

标签: powershell arraylist find

我希望你能帮助我。我使用两个ArrayLists:

array1填充了log.csv(包含头和登录数据,列'pc'的值是唯一的)。它被定义为ArrayList,因为我想添加条目。

#pc,name,date,city
#pc-x,name-1,2017-01-01,berlin
#pc-y,name-1,2017-01-02,berlin
#pc-z,name-2,2017-01-02,munich
[System.Collections.ArrayList]$array1 = Import-Csv log.csv

在运行时期间填充array2

$array2=[System.Collections.ArrayList]@()
... ForEach-Object {
$array2.Add([PSCustomObject]@{ pc=$pcname
                               name=$loginname
                               date=$logindate }) >$null }

我想做什么: 更新array1.date = array2.date,其中array1.pc = array2.pc

如果在array1中找不到任何条目,我想添加它:

 $array1.Add([PSCustomObject]@{ pc=$pcname
                                name=$loginname
                                date=$logindate 
                                city='[unknown]' }) >$null

最后再次导出array1:

$array1 | Export-Csv log.csv -Encoding UTF8 -NoTypeInformation

所以问题是:如何在array1中找到条目并更新它?现在努力工作几天......

2 个答案:

答案 0 :(得分:0)

以下是我创建的可能有用的示例。注意:我使用List类型而不是ArrayList类型。此外,它假定要更新的数据中只有一个可能匹配的PC名称。您必须更改它才能更新文件,因为它只更新了第一个List变量。让我知道它是怎么回事。

[PSCustomObject]
{
[string] $pc,
[string] $name,
[string] $date,
[string] $city
}

[System.Collections.Generic.List[PSCustomObject]] $list1 = Import-Csv "C:\SOSamples\log.csv";
[System.Collections.Generic.List[PSCustomObject]] $list2 = Import-Csv "C:\SOSamples\log2.csv";
[PSCustomObject] $record = $null;
[PSCustomObject] $match = $null;

foreach($record in $list2)
{
    # NOTE: This only retrieves the FIRST MATCHING item using a CASE-INSENSITIVE comparison       
    $match = $list1 | Where { $_.pc.ToLower() -eq $record.pc.ToLower() } | Select -First 1;

    if($match -eq $null)
    {
        Write-Host "Not Found!";
        $list1.Add($record);
    }
    else 
    {
        Write-Host "Found!";
        $match.date = $record.date;
    }
}

Write-Host "--------------------------------------------------------------------"

foreach($record in $list1)
{
    Write-Host $record
}

答案 1 :(得分:0)

尝试这样的事情:

:selected