Frage

Wie kann ich umwandeln Eingabeparameter der Funktion auf die richtige Art?

Ich möchte eine Zeichenfolge zurückgegeben, hat der Teil der URL übergeben werden entfernt.

Dies funktioniert, aber es verwendet einen hartcodierten Zeichenfolge:

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

$SiteName = CleanUrl($HostHeader)
echo $SiteName

Dies schlägt fehl:

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://", "")
War es hilfreich?

Lösung

Das Konzept ist hier richtig.

Das problem ist mit dem Namen der Variablen, die Sie gewählt haben.$input ist eine reservierte variable verwendet, die von PowerShell zu stellen eine Reihe von pipeline-Eingaben.Wenn Sie Ihre Variablennamen, sollten Sie kein problem haben.

PowerShell eine replace-operator, so könnten Sie Ihre Funktion in

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

Andere Tipps

Steve ' s Antwort funktioniert.Das problem mit dem Versuch, ESV-Skript ist, dass Sie $input,, das ist eine reservierte variable (es sammelt automatisch mehrere Pipe-Eingabe in eine einzelne variable).

Sollten Sie jedoch verwenden .Replace (), wenn Sie müssen die extra-feature(s)- ersetzen (es behandelt reguläre Ausdrücke, usw.).

function CleanUrl([string]$url)
{
    $url.Replace("http://","")
}

Das wird funktionieren, aber so würde:

function CleanUrl([string]$url)
{
    $url -replace "http://",""
}

Auch, wenn man sich auf eine PowerShell-Funktion, nicht verwenden Sie Klammern:

$HostHeader = "http://google.com"
$SiteName = CleanUrl $HostHeader
Write-Host $SiteName

Hoffe, das hilft.Durch die Weg, um zu demonstrieren, $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://", "")
}

Dies funktionierte für mich:

function CleanUrl($input)
{
    return $input.Replace("http://", "")
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top