С помощью справки по отладке от Jeroen мне удалось выяснить, почему это происходит.
PowerShell имеет функцию безопасности, называемую режим ограниченного языка, которая предотвращает использование любого, кроме основного набора типов из белого списка. Похоже, происходит то, что я определяю блок скриптов, который, в свою очередь, преобразуется в System.Text.RegularExpressions.MatchEvaluator
перед передачей в функцию Replace
. Однако оценщик совпадений находится за пределами этого основного набора типов, что означает, что когда механизм PowerShell пытается принудительно привести тип к перегрузке Replace
, единственным другим допустимым является Replace(string, string, string)
(спасибо Jeroen за указание на это в комментариях) , Функция Replace
выполняет свою работу, но с обычной строкой в качестве замены, что приводит к странному поведению.
Я не могу изменить языковой режим сеанса PowerShell на компьютере, на котором я работаю в настоящее время работает с тем, как оно применяется через групповые политики, но обходной путь для меня, по крайней мере, заключался в использовании повышенного сеанса PowerShell и ISE для тестирования моего сценария.