这里的概念是正确的.
问题在于您选择的变量名称.$ input是PowerShell用来表示管道输入数组的保留变量.如果更改变量名称,则不应该有任何问题.
PowerShell确实有一个替换运算符,因此您可以将函数转换为
function CleanUrl($url) { return $url -replace 'http://' }
史蒂夫的回答有效.尝试重现ESV脚本的问题在于您正在使用$input
,这是一个保留变量(它会自动将多个管道输入收集到一个变量中).
但是,您应该使用.Replace(),除非您需要-replace的额外功能(它处理正则表达式等).
function CleanUrl([string]$url) { $url.Replace("http://","") }
这会奏效,但也会这样:
function CleanUrl([string]$url) { $url -replace "http://","" }
此外,在调用PowerShell函数时,请勿使用括号:
$HostHeader = "http://google.com" $SiteName = CleanUrl $HostHeader Write-Host $SiteName
希望有所帮助.顺便说一下,要证明$ input:
function CleanUrls { $input -replace "http://","" } # Notice these are arrays ... $HostHeaders = @("http://google.com","http://stackoverflow.com") $SiteNames = $HostHeader | CleanUrls Write-Output $SiteNames
function CleanUrl([string] $url) { return $url.Replace("http://", "") }