Wie mache ich einen string-Ersatz in einer PowerShell-Funktion?
-
08-06-2019 - |
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://", "")
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://", "")
}