Isso não é bonito, mas funciona:
Get-ChildItem \path\to\folder -Filter '*.txt' | foreach {
$text = Get-Content $_.FullName
$text = $text -replace 'a2','test'
$text = $text -replace 'a4','foo'
$text | Set-Content $_.FullName
}
O problema com o seu script é que você precisa de Set-Content
no loop ForEach-Object
.