Поиск совпадений в 2 списках, повышение производительности powershell - PullRequest
0 голосов
/ 09 апреля 2019

Я ищу помощь, чтобы сделать что-то более производительное, так как мой метод действительно глуп, но работает

Я немного искал на stackoverflow, но не нашел что-то, совпадающее с моей идеей

ForEach($app in $apps){
    ForEach($removeapp in $applist)
    {
        If ($app.Displayname -like $removeapp.appname) {
            Write-Host "Removing: " $app.Displayname -ForegroundColor Green
        }
        Else{
            Write-Host "Skiping: " $app.Displayname -ForegroundColor Red
        }
    }
}

Я в основном сравниваю каждый из них, что дает мне x ^ y возможности, что довольно плохо и делает медленной любую помощь, как сделать это быстрее?

$apps содержит каждый предоставленный пакет приложения в образе
например -> Displayname = Microsoft.ZuneMusic

$applist содержит те имена приложений, которые будут удалены в CSV например -> Appname = Microsoft.ZuneVideo

И я хочу четко видеть, какие пропущены, а какие удалены.

1 Ответ

1 голос
/ 09 апреля 2019

Думаю, я бы использовал для этого оператор регулярного выражения -match.Примерно так:

# build a regex from all the app displaynames joined using the regex OR ("|") character
$appNames = ($apps | ForEach-Object { [regex]::Escape($_.DisplayName) }) -join '|'
$applist | ForEach-Object {
    if ( $_.appname -match $appNames ) {
        Write-Host "Removing: $($_.appname)" -ForegroundColor Green
    }
    else {
        Write-Host "Skipping: $($_.appname)" -ForegroundColor Red
    }
}

Надеюсь, что поможет

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