【问题标题】:How do I do a string replacement in a PowerShell function?如何在 PowerShell 函数中进行字符串替换?
【发布时间】:2010-09-06 02:47:04
【问题描述】:

如何将函数输入参数转换为正确的类型?

我想返回一个字符串,其中删除了传递给它的部分 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://", "")

【问题讨论】:

    标签: string powershell function replace


    【解决方案1】:

    史蒂夫的回答有效。您尝试重现 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
    

    【讨论】:

      【解决方案2】:

      这里的概念是正确的。

      问题在于您选择的变量名。 $input 是 PowerShell 用来表示管道输入数组的保留变量。如果你改变你的变量名,你应该没有任何问题。

      PowerShell 确实有 a replace operator,所以你可以把你的函数变成

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

      【讨论】:

        【解决方案3】:
        function CleanUrl([string] $url)
        {
            return $url.Replace("http://", "")
        }
        

        【讨论】:

          【解决方案4】:

          这对我有用:

          function CleanUrl($input)
          {
              return $input.Replace("http://", "")
          }
          

          【讨论】:

          • 不要使用 $input 变量。已保留。
          猜你喜欢
          • 2012-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-20
          • 2012-07-16
          • 2010-12-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多