In PowerShell, le funzioni restituiscono qualsiasi valore restituito da ciascuna riga nella funzione; non è necessaria un'istruzione esplicita return
.
Procedimento String.IndexOf()
restituisce un valore intero, quindi in questo esempio, DoSomething
restituisce '2' e la tabella hash come array di oggetti visti con .GetType()
.
function DoSomething {
$site = "Something"
$app = "else"
$app.IndexOf('s')
return @{"site" = $($site); "app" = $($app)}
}
$siteInfo = DoSomething
$siteInfo.GetType()
L'esempio seguente mostra 3 modi per bloccare l'uscita indesiderati:
function DoSomething {
$site = "Something"
$app = "else"
$null = $app.IndexOf('s') # 1
[void]$app.IndexOf('s') # 2
$app.IndexOf('s')| Out-Null # 3
# Note: return is not needed.
@{"site" = $($site); "app" = $($app)}
}
$siteInfo = DoSomething
$siteInfo['site']
Ecco un esempio di come per avvolgere più istruzioni in uno ScriptBlock per acquisire l'output indesiderati:
function DoSomething {
# The Dot-operator '.' executes the ScriptBlock in the current scope.
$null = .{
$site = "Something"
$app = "else"
$app
}
@{"site" = $($site); "app" = $($app)}
}
DoSomething
'$ SiteInfo [ "sito"]' 'non tornare Something' per me. – Rynant
anche per me, versione PowerShell? –
Ok ho qualche informazione in più. Ho aggiunto solo una semplice chiamata su una variabile ($ app) sopra nel mio codice funzione. Quello che stava accadendo era che il valore da $ app e l'hashtable è stato restituito alla variabile che ha chiamato la funzione. Quindi se ho fatto un ($ siteInfo | fl) mostrerebbe sia "else" che le due chiavi/valori. Perché? – pghtech