En PowerShell, las funciones devuelven todos y cada uno de los valores que devuelve cada línea en la función; una declaración explícita return
no es necesaria.
El método String.IndexOf()
devuelve un valor entero, por lo que en este ejemplo, DoSomething
devuelve '2' y la tabla hash como matriz de objetos que se observan con .GetType()
.
function DoSomething {
$site = "Something"
$app = "else"
$app.IndexOf('s')
return @{"site" = $($site); "app" = $($app)}
}
$siteInfo = DoSomething
$siteInfo.GetType()
El siguiente ejemplo muestra 3 maneras de bloquear la salida no deseada:
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']
Aquí es un ejemplo de cómo envolver varias instrucciones en una ScriptBlock para capturar la salida no deseada:
function DoSomething {
# The Dot-operator '.' executes the ScriptBlock in the current scope.
$null = .{
$site = "Something"
$app = "else"
$app
}
@{"site" = $($site); "app" = $($app)}
}
DoSomething
'$ SITEINFO [ "sitio"]' 'no volver Something' para mí. – Rynant
para mí también, versión Powershell? –
Ok, tengo algo más de información. Agregué una simple llamada a una variable ($ app) de arriba en mi código de función. Lo que ocurría era que el valor de $ app y la tabla hash se devolvía a la variable que llamaba a la función. Entonces, si hiciera un ($ siteInfo | fl) mostraría tanto "else" como las dos claves/valores. ¿Porqué es eso? – pghtech