Come faccio a fare una sostituzione in un PowerShell funzione?
-
08-06-2019 - |
Domanda
Come faccio a convertire i parametri di input della funzione al tipo giusto?
Voglio restituire una stringa che ha la parte dell'URL passati rimosso.
Questo funziona, ma utilizza un hard-stringa di codice:
function CleanUrl($input)
{
$x = "http://google.com".Replace("http://", "")
return $x
}
$SiteName = CleanUrl($HostHeader)
echo $SiteName
Questo non funziona:
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://", "")
Soluzione
Qui il concetto è corretto.
Il problema è con il nome della variabile che avete scelto.$input è una variabile riservata utilizzato da PowerShell per rappresentare un vettore di input.Se si modifica il nome della variabile, non dovreste avere alcun problema.
PowerShell non hanno sostituire operatore, così si potrebbe rendere la vostra funzione in
function CleanUrl($url)
{
return $url -replace 'http://'
}
Altri suggerimenti
Steve la risposta di opere.Il problema con il tentativo di riprodurre ESV script che stai usando $input
, che è una variabile riservata (automaticamente raccoglie più di input reindirizzato in una singola variabile).
Tuttavia, si consiglia di utilizzare .Replace() a meno che non avete bisogno di extra caratteristica(s) di sostituire (gestisce le espressioni regolari, ecc).
function CleanUrl([string]$url)
{
$url.Replace("http://","")
}
Che funziona, ma così sarebbe:
function CleanUrl([string]$url)
{
$url -replace "http://",""
}
Inoltre, quando si richiama un PowerShell funzione, non utilizzare le parentesi:
$HostHeader = "http://google.com"
$SiteName = CleanUrl $HostHeader
Write-Host $SiteName
Speranza che aiuta.A proposito, per dimostrare $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://", "")
}
Questo ha funzionato per me:
function CleanUrl($input)
{
return $input.Replace("http://", "")
}