Исключить из файла, если строка содержит значение из переменной A ИЛИ B - PullRequest
0 голосов
/ 05 февраля 2019

Я пишу в файл, используя потоковую запись, и я хочу исключить все строки, которые соответствуют значениям, содержащимся в двух параметрах.Я пробовал приведенный ниже код, но он не выводит никаких значений, когда я включаю второе условие ($file_stream -notmatch $exclude_permission_type).

$exclude_user_accounts = 'account1', 'account2', 'account3' 
$exclude_permission_type = 'WRITE'

while ($file_stream = $report_input.ReadLine()) {
  if ($file_stream -notmatch $exclude_user_accounts -and $file_stream -notmatch $exclude_permission_type) { 
    $_report_output.WriteLine($file_stream)
  } 
}

1 Ответ

0 голосов
/ 05 февраля 2019

Очевидно, что ваш код никогда не работал так, как вы задумывали, даже с первым условием, потому что строка никогда не может соответствовать массиву строк.<string> -notmatch <array> всегда будет иметь значение true, даже если массив содержит точное совпадение.Вы не можете делать частичные совпадения подобным образом.

Создайте одно регулярное выражение из всех строк фильтра:

$excludes = 'account1', 'account2', 'account3', 'WRITE'

$re = ($excludes | ForEach-Object {[regex]::Escape($_)}) -join '|'

, затем отфильтруйте строки, используя это регулярное выражение:

if ($file_stream -notmatch $re) {
    $_report_output.WriteLine($file_stream)
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...