Utilizar el ámbito de variables en scripts de Windows PowerShell
Intuitivamente, cabría suponer que se puede acceder a la variable denominada $computer que estableció en una función una vez que la función se haya completado en el script. Sin embargo, ese no es el caso. Las variables tienen un ámbito específico y están limitadas en cuanto a cómo interactúan entre ámbitos.
En la tabla siguiente se describen los tres ámbitos y cómo afectan al uso de variables.
Tabla 1: Ámbitos
| Ámbito | Descripción |
|---|---|
| Global | El ámbito global corresponde al símbolo de sistema de Windows PowerShell. Las variables establecidas en el entorno de Windows PowerShell se pueden consultar en todos los scripts iniciados allí. Las variables creadas en una consola de comandos de Windows PowerShell no existen en otras consolas de comandos de Windows PowerShell ni en instancias del entorno de scripting integrado (ISE) de Windows PowerShell. |
| Script | El ámbito de script es para un único script. Las variables establecidas en un script se pueden consultar mediante todas las funciones de ese script. Si establece un valor de variable en el ámbito de script que ya existe en el ámbito global, se crea una nueva variable en el ámbito de script. Habrá, por tanto, dos variables con el mismo nombre en dos ámbitos diferentes. En este punto, al revisar el valor de la variable en el script, se devuelve el valor de la variable en el ámbito del script. |
| Función | El ámbito de función es para una sola función. Las variables establecidas dentro de una función no se comparten con otras funciones ni con el script. Si defines un valor de variable en el entorno de función que ya existe en el entorno global o de script, se crea una nueva variable en el entorno de función. Habrá, por tanto, dos variables con el mismo nombre en dos ámbitos diferentes. |
Nota:
Para evitar confusiones, se recomienda evitar el uso de los mismos nombres de variable en distintos ámbitos.
Además de consultar una variable en un ámbito de nivel superior, también puede modificarla haciendo referencia específicamente al ámbito de la variable al modificarla. Para modificar una variable de ámbito de script desde una función, use la sintaxis siguiente:
$script:var = "Modified from function"
Es un procedimiento recomendado evitar modificar variables entre ámbitos, ya que hacerlo puede causar confusión. En su lugar, establezca la variable de ámbito de script igual a la salida de la función. Si los datos de la función están en una variable, puede usar Return() para volver a pasarlos al script.
A continuación, se muestra un ejemplo de uso de Return() al final de una función para volver a pasar un valor de variable al ámbito de script:
Return($users)
Nota:
El uso de Return() en una función agrega los datos especificados a la canalización de datos que se devuelven, pero no reemplaza los datos existentes en la canalización. Como parte del desarrollo del script, debe comprobar exactamente qué datos devuelve una función.