Вы хотите экранировать символы, которые PowerShell считает зарезервированными. Также при использовании Get-Content вам необходимо указать полный путь. Этот путь доступен в разделе Полное имя дочернего элемента (Get-ChildItem).
Get-ChildItem 'D:\SomeFolder\*.MKE' -Recurse | ForEach {
(Get-Content $_.FullName) -replace 'PolicyFile=\$\(SrcRoot\)BeHttp', 'PolicyFile=$(SrcRoot)PPCore//BeHttp' | Set-Content $_.FullName }
Чтобы избежать $ (), используйте \
. Кроме того, вам не нужно использовать For-Each для строки, полученной из Get-Content.
Обновление:
При запуске Get-ChildItem
я вижу все файлы из всех подпапок.
PS C:\Users\zx18421> Get-ChildItem 'C:\Temp\*.MKE' -Recurse | % { $_.FullName}
C:\Temp\1\new.mke
C:\Temp\2\3\new.mke
C:\Temp\2\new.mke
C:\Temp\new.mke