Get-ChildItem Где-Object-notlike $ array - Есть ли способ сделать это? - PullRequest
0 голосов
/ 07 января 2019

Я написал скрипт, который будет извлекать указанную папку и делать анализ файлов внутри нее. Мне нужно исключить указанные подпапки в анализе. Этот список исключений изменяется в зависимости от анализируемой базовой папки. У меня есть скрипт, работающий с использованием длинного шаблона, как это:

Get-ChildItem -File -Recurse $source_folder | 
Where-Object {
    $_.FullName -notlike "*\folder_name0\*" -and 
    $_.FullName -notlike "*\folder_name1\*" -and 
    $_.FullName -notlike "*\folder_name2\*" -and 
    $_.FullName -notlike "*\folder_name3\*" -and 
    $_.FullName -notlike "*\folder_name4\*"
}

но это не очень многоразово. Я хотел бы иметь возможность хранить списки исключений в .CSV и вызывать нужный мне список исключений на основе набора папок, который я анализирую. Я хотел бы сделать что-то вроде:

$exception_list = Import-CSV .\exception_list
Get-ChildItem -File -Recurse $source_folder | 
Where-Object {$_.FullName -notlike $exception_list}

но это не работает. Я подозреваю, потому что я не могу указать и 'и' или 'или' между элементами в массиве. Я кратко рассмотрел попытку создания целого аргумента на лету, используя foreach($exception in $exception_list){$argument += "$_.FullName -notlike $exception -and"}, но это оказалось довольно глупым и сложным довольно быстро, так как вам все еще нужно удалить последние 'и'.

Есть ли эффективный способ сделать это?

1 Ответ

0 голосов
/ 07 января 2019

это создает массив частичных имен, которые должны быть исключены, и использует этот массив для построения регулярного выражения ИЛИ для использования в -notmatch тесте.

$ExcludedDirList = @(
    'PSES-'
    'vscode'
    'Test_'
    )
# regex uses the pipe symbol as the logical "OR"
$RegexExcludedDirList = $ExcludedDirList -join '|'

$Results = Get-ChildItem -Path $env:TEMP -File -Recurse |
    Where-Object {
        $_.DirectoryName -notmatch $RegexExcludedDirList
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...