PowerShell:如果文本的任何部分匹配,则通过另一个 [filter] 数组过滤数组。

Jas*_*n V 1 powershell

好吧,我对 PowerShell 还很陌生。

我已经编写了一段可以工作的代码,但它闻起来完全错误。从 PowerShell 的角度来看,正确的写法是什么?

$filters = @("*a*","*b*")
$data = @("c/a","c/b","c/a/d","e","a","e/f")
$desiredResults = @("e","e/f")

Write-Host "Filters" -ForegroundColor Yellow
$filters 
Write-Host "Data" -ForegroundColor Yellow
$data

$results = @()

foreach ($d in $data)
{
    [bool] $skip = $false
    foreach ($filter in $filters)
    {
        if ($d -like $filter)
        {
            $skip = $true
        }
    }

    if ($skip -eq $false)
    {
        $results += $d
    }
}

Write-Host "Desired Results" -ForegroundColor Yellow
$desiredResults
Write-Host "Results" -ForegroundColor Yellow
$results
Run Code Online (Sandbox Code Playgroud)

Cha*_*Rai 5

你可以这样做

$filters = @("a","b")
$data = @("c/a","c/b","c/a/d","e","a","e/f")
$desiredResults = @("e","e/f")

$data | Select-String -Pattern $filters -NotMatch
Run Code Online (Sandbox Code Playgroud)