$badDir -Match $path.ToLower()
будет сравнивать "C: \ Windows" с каждым элементом $baddir
.Так как ни одно из этих совпадений не является совпадением, вот почему вы ошибаетесь.Операция запутана также, так как ваша строка шаблона содержит регулярное выражение.Однако в любом случае это не то, что вам нужно ...
Вы уверены, что вам нужно сравнить каждый элемент $baddir
s в отдельности с $path
.Я не знаю ни одного оператора, который будет выполнять ленивое сопоставление, как вы ожидаете, здесь
($badDir | ForEach-Object{$path -match [regex]::Escape($_)}) -contains $true
$badDir
элементы содержат метасимволы регулярных выражений, поэтому нам нужно избегать их, чтобы получить истинные совпадения.Затем мы просто проверяем, содержит ли полученный логический массив истинные элементы.Вставьте это в блок if или в трубу, и вы сможете получить желаемые результаты.
Существует другой способ работы с этим, в зависимости от вашей фактической реализации, но приведенного выше должно быть достаточно.
Без регулярных выражений
В заголовке говорится без регулярных выражений, поэтому давайте адаптируем то, что мы имеем выше, чтобы удалить эту часть подхода.Логика все та же
($badDir | ForEach-Object{$path.ToLower().IndexOf("$_".ToLower()) -ge 0}) -contains $true
Проверьте, находится ли одна строка в другой.Если есть, мы оцениваем как логическое значение и, как и прежде, проверяем, верен ли один из результатов.