Está en la página 1de 9

TEMA

about_Scopes
DESCRIPCIN BREVE
Explica el concepto de mbito en Windows PowerShell y muestra cmo
establecer y cambiar el mbito de los elementos.
DESCRIPCIN DETALLADA
Windows PowerShell protege el acceso a las variables, los alias,
las funciones y las unidades de Windows PowerShell (PSDrives) limitando
las ubicaciones donde se pueden leer y cambiar. Mediante unas pocas
reglas sencillas de mbito, Windows PowerShell ayuda a garantizar que
no se pueda cambiar accidentalmente un elemento que no debe modificarse.
A continuacin figuran las reglas bsicas de mbito:
- Un elemento que se incluye en un mbito est visible en el
mbito donde se cre y en cualquier mbito secundario,
a menos que se establezca explcitamente dicho elemento como
privado. Las variables, los alias, las funciones y las unidades
de Windows PowerShell pueden colocarse en uno o varios mbitos.
- Un elemento que se crea en un mbito puede cambiarse
nicamente en el mbito donde se cre, a menos que se
especifique explcitamente un mbito diferente.
Si se crea un elemento en un mbito y dicho elemento comparte su
nombre con un elemento en otro mbito, puede que el elemento
original quede oculto bajo el nuevo elemento. Sin embargo, no se
invalida ni se modifica.
mbitos de Windows PowerShell
Los mbitos de Windows PowerShell tienen nombres y nmeros.
Los mbitos con nombre especifican un mbito absoluto. Los nmeros son
relativos y reflejan la relacin que existe entre los mbitos.
mbito global:
Es el mbito que est en vigor cuando se inicia Windows
PowerShell. Las variables y funciones que estn presentes
cuando se inicia Windows PowerShell se han creado en el
mbito global. Esto incluye las variables automticas y las
variables de preferencia. Tambin estn incluidos los alias, las
variables y las funciones que estn en los perfiles de Windows
PowerShell.
mbito local:
Es el mbito actual. El mbito local puede ser el mbito global o
cualquier otro mbito.
mbito de script:
Es el mbito que se crea durante la ejecucin de un archivo
de script. En el mbito de script se ejecutan nicamente los
comandos del script. Para los comandos de un script, el mbito
de script es el mbito local.

mbito privado:
Los elementos que se encuentran en el mbito privado no se
pueden ver fuera del mbito actual. Se puede utilizar un mbito privado
para crear una versin privada de un elemento que lleve el mismo nombre
en otro mbito.
mbitos numerados:
Para hacer referencia a los mbitos, se puede usar un nombre
o un nmero que describe la posicin relativa de un mbito
con respecto a otro.
El mbito 0 representa el mbito actual o local. El mbito 1 indica
el mbito principal inmediato. El mbito 2 indica el mbito
principal del mbito principal, etc. Los mbitos numerados resultan
tiles si se han creado muchos mbitos recursivos.
mbitos principales y secundarios
Se puede crear un mbito nuevo ejecutando un script o una funcin,
creando una sesin o iniciando una nueva instancia de Windows PowerShell.
Cuando se crea un mbito nuevo, el resultado es un mbito principal
(mbito original) y un mbito secundario (mbito que se ha creado).
En Windows PowerShell, todos los mbitos son mbitos secundarios
del mbito global, pero se pueden crear muchos mbitos y muchos
mbitos recursivos.
A menos que se establezcan explcitamente los elementos como privados,
los elementos del mbito principal estn disponibles en el mbito
secundario. Sin embargo, los elementos que se crean y se modifican en
el mbito secundario no afectan al mbito principal, a menos que se
especifique explcitamente el mbito al crear los elementos.
Herencia
Un mbito secundario no hereda las variables ni los alias ni las
funciones del mbito principal. A menos que un elemento sea
privado, el mbito secundario puede ver los elementos del mbito
principal. Adems, puede cambiar los elementos especificando
explcitamente el mbito principal, pero los elementos no forman
parte del mbito secundario.
Sin embargo, un mbito secundario se crea con un conjunto de
elementos. Normalmente, incluye todos los alias que tienen la opcin
AllScope. Esta opcin se aborda ms adelante en este tema. Incluye
todas las variables que tienen la opcin AllScope, adems de algunas
variables que se pueden usar para personalizar el mbito, como
MaximumFunctionCount.
Para obtener los elementos de un mbito concreto, utilice el
parmetro Scope de Get-Variable o Get-Alias.

Por ejemplo, para obtener todas las variables del mbito local, escriba:
get-variable -scope local
Para obtener todas las variables del mbito global, escriba:
get-variable -scope global
Modificadores de mbito
Para especificar el mbito de una nueva variable, un nuevo alias
o una nueva funcin, use un modificador de mbito. Los valores
vlidos de un modificador son Global y Script.
La sintaxis de un modificador de mbito en una variable es:
$[<modificador de mbito>]:<nombre> = <valor>
La sintaxis de un modificador de mbito en una funcin es:
funcin [<modificador de mbito>]:<nombre> {<cuerpo de la funcin>}
El mbito predeterminado de los scripts es el mbito de script.
El mbito predeterminado de las funciones y los alias es el
mbito local, incluso si se definen en un script.
El comando siguiente, que no usa un modificador de mbito, crea
una variable en el mbito actual o local:
$a = "uno"
Para crear la misma variable en el mbito global, use el
modificador de mbito Global:
$global:a = "uno"
Para crear la misma variable en el mbito de script, use el
modificador de mbito de script:
$script:a = "uno"
Tambin se puede usar un modificador de mbito en las funciones. La
siguiente definicin de funcin crea una funcin en el mbito global:
function global:Hola
{
write-host "Hola a todos"
}
Los modificadores de mbito tambin se pueden usar para hacer

referencia a una variable de otro mbito. El comando siguiente hace


referencia a la variable $test, primero en el mbito local y despus en el
mbito global:
$test
$global:test
Opcin AllScope
Las variables y los alias tienen una propiedad Option, cuyo valor
puede ser AllScope. Los elementos que tienen la propiedad AllScope
pasan a formar parte de todos los mbitos secundarios que se creen,
si bien los mbitos principales no los heredan de forma retroactiva.
Un elemento que tiene la propiedad AllScope est visible en el mbito
secundario y forma parte de dicho mbito. Los cambios que se realicen
en el elemento desde cualquiera de los mbitos afectarn a todos los
mbitos en los que est definida la variable.
Administrar el mbito
Varios cmdlets tienen un parmetro Scope que permite obtener o
establecer (crear y cambiar) los elementos de un mbito concreto.
Use el comando siguiente para obtener todos los cmdlets de su
sesin que tengan un parmetro Scope:
get-help * -parameter scope
Para obtener las variables que estn visibles en un mbito
determinado, utilice el parmetro Scope de Get-Variable. Los
parmetros visibles incluyen parmetros globales, parmetros del
mbito principal y parmetros del mbito actual.
Por ejemplo, el comando siguiente obtiene las variables que estn
visibles en el mbito local:
get-variable -scope local
Para crear una variable en un mbito determinado, utilice un
modificador de mbito o el parmetro Scope de Set-Variable.
El comando siguiente crea una variable en el mbito global:
new-variable -scope global -name a -value "Uno"
Tambin puede utilizar el parmetro Scope del cmdlet New-Alias,
Set-Alias o Get-Alias para especificar el mbito. El comando
siguiente crea un alias en el mbito global:
new-alias -scope global -name np -value Notepad.exe
Para obtener las funciones de un mbito determinado, utilice el

cmdlet Get-Item cuando se encuentre en dicho mbito. El cmdlet


Get-Item no tiene el parmetro Scope.
Usar la notacin de script prefijado por punto con el mbito
Los scripts
crean en un
a menos que
mbito para

y funciones siguen todas las reglas de mbito. Se


mbito determinado y afectan nicamente a ese mbito,
se use un parmetro de cmdlet o un modificador de
cambiar dicho mbito.

Sin embargo, se puede agregar un script o una funcin al mbito actual


mediante la notacin de script prefijado por punto. De ese modo,
si se ejecuta un script en el mbito actual, todos los alias, funciones
y variables que cree el script estarn disponibles en el mbito actual.
Para agregar una funcin al mbito actual, inserte un punto (.) y
un espacio delante de la ruta de acceso y el nombre de la funcin
en la llamada de funcin.
Por ejemplo, para ejecutar el script Ejemplo.ps1 desde el directorio
C:\Scripts en el mbito de script (valor predeterminado para los scripts),
use el comando siguiente:
c:\scripts\ejemplo.ps1
Para ejecutar el script Ejemplo.ps1 en el mbito local, use el comando
siguiente:
. c:\scripts.ejemplo.ps1
Cuando se usa el operador de llamada (&) para ejecutar una
funcin o un script, no se agrega al mbito actual. En el ejemplo
siguiente se utiliza el operador de llamada:
& c:\scripts.ejemplo.ps1
Cualquier alias, funcin o variable que cree el script
Ejemplo.ps1 no estar disponible en el mbito actual.
Restringir sin mbito
Algunos conceptos de Windows PowerShell son similares al mbito o
interactan con l. Estos conceptos podran confundirse con el mbito
o con su comportamiento.
Las sesiones, los mdulos y los smbolos del sistema anidados son
entornos autnomos, pero no son mbitos secundarios del mbito
global en la sesin.
Sesiones:

Una sesin es un entorno en el que se ejecuta Windows PowerShell.


Cuando se crea una sesin en un equipo remoto, Windows PowerShell
establece una conexin persistente con el equipo remoto. La conexin
persistente permite usar la sesin para varios comandos relacionados.
Dado que es un entorno autnomo, una sesin tiene su propio
mbito pero no es un mbito secundario de la sesin en la que
se cre. La sesin se inicia con su propio mbito global.
Este mbito es independiente del mbito global de la sesin.
Se pueden crear mbitos secundarios en la sesin. Por
ejemplo, se puede ejecutar un script para crear un mbito
secundario en una sesin.
Mdulos:
Se puede usar un mdulo de Windows PowerShell para compartir y
proporcionar herramientas de Windows PowerShell. Un mdulo es una
unidad que puede contener cmdlets, scripts, funciones, variables,
alias y otros elementos tiles. A menos que se especifique
explcitamente, los elementos de un mdulo no son accesibles desde
fuera del mdulo. Por consiguiente, se puede agregar el mdulo a una
sesin y usar los elementos pblicos sin tener que preocuparse de que
los otros elementos invaliden los cmdlets, scripts, funciones y dems
elementos de la sesin.
La privacidad de un mdulo se comporta como un mbito, pero
al agregar un mdulo a una sesin, no se modifica el mbito.
Adems, el mdulo no tiene su propio mbito, aunque los
scripts del mdulo, al igual que todos los scripts de Windows
PowerShell, s tienen su propio mbito.
Smbolos del sistema anidados:
De forma similar, los smbolos del sistema anidados no tienen
su propio mbito. Cuando se escribe un smbolo del sistema
anidado, este es un subconjunto del entorno. Sin embargo, se
permanece en el mbito local.
Los scripts tienen su propio mbito. Cuando se depura un
script y se alcanza un punto de interrupcin en el script, se
entra en el mbito de script.
Opcin de privacidad:
Los alias y las variables tienen una propiedad Option, cuyo
valor puede ser Private. Los elementos que tienen la opcin
Private se pueden ver y modificar en el mbito donde se han
creado, pero no se pueden ver ni modificar fuera de ese mbito.
Por ejemplo, si se crea una variable que tiene la opcin de
privacidad en el mbito global y, a continuacin, se ejecuta
un script, los comandos Get-Variable del script no muestran
la variable privada. Esto es as incluso si se usa el
modificador de mbito global.
Se puede usar el parmetro Option de los cmdlets New-Variable, Set-

Variable, New-Alias y Set-Alias para establecer el valor de la


propiedad Option en Private.
Visibilidad:
La propiedad Visibility de una variable o de un alias
determina si se puede ver el elemento fuera del contenedor,
como un mdulo, en el que se cre. La propiedad Visibility se ha
diseado para los contenedores del mismo modo que se ha diseado el
valor Private de la propiedad Option para los mbitos.
Los valores de la propiedad Visibility son Public y Private.
Los
elementos con visibilidad privada se pueden ver y modificar
nicamente en el contenedor donde se crearon. Si se agrega o se
importa el contenedor, los elementos con visibilidad privada no se
pueden ver ni modificar.
Dado que la propiedad Visibility se ha diseado para los
contenedores, funciona de manera diferente en los mbitos.
Si se crea un elemento con visibilidad privada en el mbito
global, no se podr ver ni cambiar dicho elemento en ningn
mbito. Si se intenta ver o cambiar el valor de una variable con
visibilidad privada, Windows PowerShell devolver un mensaje de error.
Se pueden usar los cmdlets New-Variable y Set-Variable para
crear una variable con visibilidad privada.
EJEMPLOS
Ejemplo 1: cambiar el valor de una variable nicamente en un script
El comando siguiente cambia el valor de la variable $ConfirmPreference
en un script. El cambio no afecta al mbito global.
En primer lugar, para mostrar el valor de la variable
$ConfirmPreference en el mbito local, use el comando siguiente:
C:\PS> $ConfirmPreference
High
Cree un script Scope.ps1 que contenga los comandos siguientes:
$ConfirmPreference = "Low"
"El valor de `$ConfirmPreference es $ConfirmPreference."
Ejecute el script. El script cambia el valor de la variable
$ConfirmPreference y, a continuacin, notifica su valor en el mbito
de script. El resultado debera ser similar al siguiente:
El valor de $ConfirmPreference es Low.

A continuacin, compruebe el valor actual de la variable $ConfirmPreference


en el mbito actual.
C:\PS> $ConfirmPreference
High
En este ejemplo, se muestra que los cambios realizados en el
valor de una variable en el mbito de script no afectan al
valor de dicha variable en el mbito principal.
Ejemplo 2: ver el valor de una variable en diferentes mbitos
Se pueden usar los modificadores de mbito para ver el valor de una
variable en el mbito local y en un mbito principal.
En primer lugar, defina una variable $test en el mbito global.
$test = "Global"
A continuacin, cree un script Ejemplo.ps1 que defina la
variable $test. En el script, use un modificador de mbito para
hacer referencia a la versin global o local de la variable $test.
# En Ejemplo.ps1
$test = "Local"
"El valor local de `$test es $test."
"El valor global de `$test es $global:test."
Cuando ejecute Ejemplo.ps1, el resultado deber ser similar al siguiente:
El valor local de $test es Local.
El valor global de $test es Global.
Cuando se complete el script, solo quedar definido el valor
global de $test en la sesin.
C:\PS> $test
Global
Ejemplo 3: cambiar el valor de una variable en un mbito principal
A menos que se proteja un elemento mediante la opcin Private u otro
mtodo, se puede ver y cambiar el valor de una variable en un mbito
principal.
En primer lugar, defina una variable $test en el mbito global.
$test = "Global"
A continuacin, cree un script Ejemplo.ps1 que defina la
variable $test. En el script, use un modificador de mbito para

hacer referencia a la versin global o local de la variable $test.


# En Ejemplo.ps1
$global:test = "Local"
"El valor global de `$test es $global:test."
Cuando se complete el script, el valor global de $test habr cambiado.
C:\PS> $test
Local
Ejemplo 4: crear una variable privada
Una variable privada es una variable con una propiedad Option
cuyo valor es Private. Las variables privadas las hereda el mbito
secundario, pero se pueden ver o cambiar nicamente en el mbito donde se
crearon.
El comando siguiente crea una variable privada denominada
$ptest en el mbito local.
new-variable -name ptest -value 1 -option private
El valor de $ptest se puede mostrar y cambiar en el mbito local.
C:\PS> $ptest
1
C:\PS> $ptest = 2
C:\PS> $ptest
2
A continuacin, cree un script Ejemplo.ps1 que contenga los comandos siguien
tes.
El comando intenta mostrar y cambiar el valor de $ptest.
# En Ejemplo.ps1
"El valor de `$Ptest es $Ptest."
"El valor de `$Ptest es $global:Ptest."
Dado que la variable $ptest no puede verse en el mbito de
script, el resultado est en blanco.
"El valor de $Ptest es ."
"El valor de $Ptest es ."
VEA TAMBIN
about_Variables
about_Environment_Variables
about_Functions
about_Script_Blocks

También podría gustarte