Powershell Performance - PullRequest
       1

Powershell Performance

0 голосов
/ 27 февраля 2019

У меня проблема с производительностью powershell при поиске файла журнала 40 ГБ.Мне нужно проверить, включены ли какие-либо из 1000 адресов электронной почты в этот файл 40 ГБ.Это займет 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

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Не читайте файл 1000 раз.

Создайте строку регулярного выражения со всеми 1000 адресами (это будет огромная строка, но эй, намного меньше, чем 40 ТБ).Например:

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

Затем выполните строку выбора и сохраните результат, чтобы выполнить в нем поиск по адресу.Надеемся, что результат будет намного меньше, чем 40 ГБ, и должен быть намного быстрее.

0 голосов
/ 27 февраля 2019

Как указано в комментариях, замените

$ergebnis = @()

на

$ergebnis = New-Object System.Collections.ArrayList

и

$ergebnis+=$adr + ";Ja"

на

$ergebnis.add("$adr;Ja")

или

$ergebnis.add("$adr;Nein")

Это значительно ускорит ваш сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...