提问人:Brian Lyttle 提问时间:8/19/2008 最后编辑:Peter MortensenBrian Lyttle 更新时间:7/13/2015 访问量:54558
如何在 PowerShell 函数中执行字符串替换?
How do I do a string replacement in a PowerShell function?
问:
如何将函数输入参数转换为正确的类型?
我想返回一个字符串,该字符串删除了部分 URL 传递到其中。
这可行,但它使用硬编码的字符串:
function CleanUrl($input)
{
$x = "http://google.com".Replace("http://", "")
return $x
}
$SiteName = CleanUrl($HostHeader)
echo $SiteName
这将失败:
function CleanUrl($input)
{
$x = $input.Replace("http://", "")
return $x
}
Method invocation failed because [System.Array+SZArrayEnumerator] doesn't contain a method named 'Replace'.
At M:\PowerShell\test.ps1:13 char:21
+ $x = $input.Replace( <<<< "http://", "")
答:
5赞
ESV
8/19/2008
#1
function CleanUrl([string] $url)
{
return $url.Replace("http://", "")
}
-4赞
EBGreen
8/19/2008
#2
这对我有用:
function CleanUrl($input)
{
return $input.Replace("http://", "")
}
评论
3赞
luccio
12/15/2016
不要使用$input变量。它是保留的。
16赞
Steven Murawski
8/19/2008
#3
这里的概念是正确的。
问题出在你选择的变量名称上。$input 是 PowerShell 用来表示管道输入数组的保留变量。如果更改变量名称,应该不会有任何问题。
PowerShell 确实有一个 replace 运算符,因此你可以将函数设为
function CleanUrl($url)
{
return $url -replace 'http://'
}
19赞
Jaykul
9/16/2008
#4
史蒂夫的回答奏效了。您尝试重现 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
评论