Вот я например не люблю скобки писать чтобы -replace использовать, и сделал такое. (ну и еще там возможность скриптблок для замены использовать)
function Replace-String {
param(
[CmdletBinding(DefaultParameterSetName="String")]
[Parameter(Mandatory=$True, ValueFromPipeline=$True)]
[String[]] $Text,
[Parameter(Position=0, Mandatory=$True)]
[string]$Pattern,
[Parameter(Position=1, ParameterSetName = "String")]
[string]$Replacement = "",
[Parameter(Position=1, ParameterSetName = "Script", Mandatory=$True)]
[System.Management.Automation.ScriptBlock]$ReplacementScript
)
BEGIN {
"Text=$Text,`nPattern=$Pattern,`nReplacement=$Replacement,`nParameterSet=$($PsCmdlet.ParameterSetName)"
}
PROCESS {
if ($ReplacementScript)
{
foreach ($T in $Text)
{
[regex]::Replace($T,$Pattern, {
$match = $args[0]
$_ = $match.groups[0].value
for($n = 0; $n -lt $match.groups.count; $n++)
{
Set-Variable -Name $n -Value $match.groups[$n].value
}
& $ReplacementScript
}, "IgnoreCase")
}
}
else {
$Text -replace $Pattern, $Replacement
}
}
}