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://", "")
È stato utile?

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://", "")
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top