How do I do a string replacement in a PowerShell function? How do I do a string replacement in a PowerShell function? powershell powershell

How do I do a string replacement in a PowerShell function?


Steve's answer works. The problem with your attempt to reproduce ESV's script is that you're using $input, which is a reserved variable (it automatically collects multiple piped input into a single variable).

You should, however, use .Replace() unless you need the extra feature(s) of -replace (it handles regular expressions, etc).

function CleanUrl([string]$url){    $url.Replace("http://","")}

That will work, but so would:

function CleanUrl([string]$url){    $url -replace "http://",""}

Also, when you invoke a PowerShell function, don't use parenthesis:

$HostHeader = "http://google.com"$SiteName = CleanUrl $HostHeaderWrite-Host $SiteName

Hope that helps. By the way, to demonstrate $input:

function CleanUrls{    $input -replace "http://",""}# Notice these are arrays ...$HostHeaders = @("http://google.com","http://stackoverflow.com")$SiteNames = $HostHeader | CleanUrlsWrite-Output $SiteNames


The concept here is correct.

The problem is with the variable name you have chosen. $input is a reserved variable used by PowerShell to represent an array of pipeline input. If you change your variable name, you should not have any problem.

PowerShell does have a replace operator, so you could make your function into

function CleanUrl($url){    return $url -replace 'http://'}


function CleanUrl([string] $url){    return $url.Replace("http://", "")}