我正在使用Streamwriter写入文件,并且想排除与两个参数中包含的值匹配的任何行。我尝试了以下代码,但是当包含第二个条件($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)
}
}
答案 0 :(得分:0)
即使仅在第一个条件下,您的代码也无法按预期的方式工作,因为字符串永远无法匹配字符串数组。 <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)
}