¿Cuál es la diferencia entre .replace y -replace in powershell?

Tenía la impresión de que el reemplazo y el reemplazo eran exactamente lo mismo, sin embargo, descubrí que no podía realizar algunas tareas de RegEx con el reemplazo que podía reemplazar. ¿Podría alguien señalar lo que me estoy perdiendo?

Broken Regex replace: $a=$a.Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") Working Regex replace: $a=$a -Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 

ps: La siguiente URL me lleva a pensar que hay opciones de reemplazo con las que no estoy familiarizado, pero no puedo encontrar información adicional sobre cómo usarlas o cómo acceder a la ayuda para estas opciones. http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace (String, String, String, RegexOptions) y también: Regex.Replace (String, String, MatchEvaluator, RegexOptions) métodos.

Gracias

Mientras que la respuesta de @Keith Hill explica la diferencia entre el método Replace y el operador -replace , para explicar por qué es posible que no vea el mismo resultado, se debe a que está utilizando el método String.Replace que reemplaza y reemplaza el operador reemplaza-regex . Puede usar el método Regex.Replace para este fin y debería ver el mismo efecto:

 [regex]::replace($a,'.:\\LOGROOT\\', "\\$env:computername\logroot\") 

En resumen, el operador -replace es igual a Regex.Replace (la sobrecarga particular vinculada anteriormente), pero en general Replace() puede ser un método de instancia o estático que puede estar haciendo algo completamente diferente de -replace

No són la misma cosa. .Replace es un método .NET en System.String o en cualquier otro tipo con un método de instancia llamado Replace . -replace es un operador de PowerShell que usa expresiones regulares. Ejecute man about_operators para ver más información sobre el operador -replace .