我在搜索40GB日志文件时遇到Powershell性能问题。
我需要检查此40gb文件中是否包含1000个电子邮件地址。这将需要180个小时:D有什么想法吗?

$logFolder = "H:\log.txt"
$adressen= Get-Content H:\Adressen.txt
$ergebnis = @()

foreach ($adr in $adressen){
    $suche =  Select-String -Path $logFolder -Pattern "\[\(\'from\'\,.*$adr.*\'\)\]" -List
    $aktiv= $false
    $adr
    if ($suche){
        $aktiv = $true
    }

    if ($aktiv -eq $true){
        $ergebnis+=$adr + ";Ja"
    }
    else{
        $ergebnis+=$adr + ";Nein"
    }
}
$ergebnis |Out-File H:\output.txt

最佳答案

不要读取文件1000次。

用所有1000个地址构建一个正则表达式行(这将是一个很大的行,但是,比40TB小得多)。喜欢:

$Pattern  = "\[\(\'from\'\,.*$( $adressen -join '|' ).*\'\)\]"

然后执行您的Select-String,并保存结果以在其中按地址搜索。希望结果将比40Gb小得多,并且应该更快。

09-25 22:54