Bri*_*tle 16 string powershell replace function
如何将函数输入参数转换为正确的类型?
我想返回一个字符串,其中包含传递给它的部分URL.
这有效,但它使用硬编码字符串:
function CleanUrl($input)
{
$x = "http://google.com".Replace("http://", "")
return $x
}
$SiteName = CleanUrl($HostHeader)
echo $SiteName
Run Code Online (Sandbox Code Playgroud)
这失败了:
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://", "")
Run Code Online (Sandbox Code Playgroud)
Ste*_*ski 16
这里的概念是正确的.
问题在于您选择的变量名称.$ input是PowerShell用来表示管道输入数组的保留变量.如果更改变量名称,则不应该有任何问题.
PowerShell确实有一个替换运算符,因此您可以将函数转换为
function CleanUrl($url)
{
return $url -replace 'http://'
}
Run Code Online (Sandbox Code Playgroud)
Jay*_*kul 16
史蒂夫的回答有效.尝试重现ESV脚本的问题在于您正在使用$input,这是一个保留变量(它会自动将多个管道输入收集到一个变量中).
但是,您应该使用.Replace(),除非您需要-replace的额外功能(它处理正则表达式等).
function CleanUrl([string]$url)
{
$url.Replace("http://","")
}
Run Code Online (Sandbox Code Playgroud)
这会奏效,但也会这样:
function CleanUrl([string]$url)
{
$url -replace "http://",""
}
Run Code Online (Sandbox Code Playgroud)
此外,在调用PowerShell函数时,请勿使用括号:
$HostHeader = "http://google.com"
$SiteName = CleanUrl $HostHeader
Write-Host $SiteName
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.顺便说一下,要证明$ input:
function CleanUrls
{
$input -replace "http://",""
}
# Notice these are arrays ...
$HostHeaders = @("http://google.com","http://stackoverflow.com")
$SiteNames = $HostHeader | CleanUrls
Write-Output $SiteNames
Run Code Online (Sandbox Code Playgroud)
function CleanUrl([string] $url)
{
return $url.Replace("http://", "")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52194 次 |
| 最近记录: |