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://", "")}