Вам необходимо добавить (? Мс) в начало вашего RegEx:
$file -replace "(?ms)(\<!-- First.*?\/>)","blank"
Это говорит механизму RegEx о том, что ваши символы подстановки должны занимать несколько строк.
Причина он работал на сайте, который вы упомянули, а не когда вы копировали его непосредственно в сценарий, потому что есть несколько различных механизмов RegEx, которые интерпретируют синтаксис RegEx. Вы заметите, что на веб-сайте, на который вы ссылаетесь, перечислены два разных движка в верхнем правом углу страницы с Javascript по умолчанию и PCRE в раскрывающемся списке.
. NET заявляет о поддержке механизма регулярных выражений PERL 5:
In. NET, шаблоны регулярных выражений определяются специальным синтаксисом или языком, который совместим с Perl 5 регулярными выражениями и добавляет некоторые дополнительные функции, такие как сопоставление справа налево.
https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions
.. но это немного вводит в заблуждение, поскольку PERL обеспечивает поддержку PCRE в версии 5.10:
Начиная с Perl 5.10.0, Perl поддерживает несколько специфичных для Python / PCRE расширений синтаксиса регулярных выражений. В то время как Perl программистам рекомендуется использовать синтаксис Perl -specifi c, также допускается следующее
https://perldoc.perl.org/perlre.html#PCRE% 2f Python -Поддержка
поэтому я предполагаю, что NET реализовал выражения в стиле Perl до поддержки PCRE, и, следовательно, используемый вами веб-сайт может не точно отражать, когда определенное регулярное выражение будет успешно проверено в сайт, который вы разместили, вообще. По крайней мере, у него есть высокая вероятность того, что он будет последовательно несовместим с его результатами в PowerShell.
Проблема с вашим l oop и несколькими файлами, очевидно, является разрешениями (о чем свидетельствует исключение). Получите права на расположение файла и, если они у вас есть, запустите ваш сценарий с повышенными правами (щелкните правой кнопкой мыши -> Запуск от имени администратора)