搜索匹配2个列表,性能升级功能强大

时间:2019-04-09 10:13:02

标签: powershell

我一直在寻求帮助以提高性能,因为我的方法确实很愚蠢,但是有效

我在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 个答案:

答案 0 :(得分:1)

我想我会为此使用正则表达式-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
    }
}

希望有帮助