1

私がやろうとしているのは、ハッシュテーブル(データベースからのユーザー情報)の配列でcsvファイル(ウェブログになる可能性があります)をフィルタリングすることです。

#$data is from a database. (about 500 items) Type: System.Data.DataTable
$users = @()
foreach($row in $data)
{
    $userItem = @{
        LoginId = $row[0]
        LastName = $row[3]
        FirstName = $row[4]
        LastAccess = $null
    }
    $users += $userItem
}
#Log files are about 14,000 lines long
$logfiles = Get-ChildItem $logFolder -Recurse | where {$_.Extension -eq ".log"} | Sort-Object BaseName -Descending
foreach($log in $logfiles)
{
    $csvLog = Import-Csv $log.FullName -Header ("Blank","LoginId","Date")
    $u = $users | Select {&_.LoginId}
    $filteredcsvLog = $cvsLog | Where-Object { $u -contains $_.LoginId}
    #This returns null
    ....

}

これはうまくいかないようです、私は何が欠けていますか。私の推測では、配列を[string []]にフラット化する必要がありますが、それもできないようです。

4

1 に答える 1

1

ハッシュテーブルの配列を実行するのではなく、カスタムオブジェクトのハッシュテーブルを実行します。例:

$users = @{}
foreach($row in $data)
{
    $userItem = new-object psobject -property @{
        LoginId = $row[0]
        LastName = $row[3]
        FirstName = $row[4]
        LastAccess = $null
    }
    $users[$userItem.LoginId] = $userItem
}

次に、フィルタリングがより簡単かつ高速になります。

foreach($log in $logfiles)
{
    $csvLog = Import-Csv $log.FullName -Header ("Blank","LoginId","Date")
    $filteredcsvLog = $cvsLog | Where-Object { $users[$_.LoginId} }
    ....
}
于 2012-04-04T16:49:51.673 に答える