Compartir a través de


about_Scopes

Descripción breve

Explica el concepto de ámbito en PowerShell y muestra cómo establecer y cambiar el ámbito de los elementos.

Descripción larga

PowerShell protege el acceso a variables, alias, funciones y unidades de PowerShell (PSDrive) limitando dónde se pueden leer y cambiar. PowerShell usa reglas de ámbito para asegurarse de que no realice cambios accidentales en los elementos de otros ámbitos.

Reglas de ámbito

Al iniciar PowerShell, el host (pwsh.exe) crea un espacio de ejecución de PowerShell. Los procesos de host pueden tener varios espacios de ejecución. Cada espacio de ejecución tiene su propio estado de sesión y contenedores de ámbito. No se puede acceder al estado y los ámbitos de sesión en instancias de espacio de ejecución.

A continuación se muestran las reglas básicas del ámbito:

  • Los ámbitos pueden anidar. Un ámbito externo se conoce como ámbito primario. Los ámbitos anidados son ámbitos secundarios de ese elemento primario.
  • Un elemento está visible en el ámbito que se creó y en cualquier ámbito secundario, a menos que lo convierta explícitamente en privado.
  • Puede declarar variables, alias, funciones y unidades de PowerShell para un ámbito fuera del ámbito actual.
  • Un elemento que creó dentro de un ámbito solo se puede cambiar en el ámbito en el que se creó, a menos que especifique explícitamente un ámbito diferente.
  • Cuando el código que se ejecuta en un espacio de ejecución hace referencia a un elemento, PowerShell busca en la jerarquía de ámbito, empezando por el ámbito actual y pasando por cada ámbito primario. Si no se encuentra el elemento, se crea un nuevo elemento en el ámbito actual. Si encuentra una coincidencia, el valor del elemento se recupera del ámbito donde se encontró. Si cambia el valor, el elemento copiado en el ámbito actual para que el cambio solo afecte al ámbito actual.
  • Si crea explícitamente un elemento que comparte su nombre con un elemento en un ámbito diferente, el elemento original podría estar oculto por el nuevo elemento, pero no se invalida ni cambia.

Ámbitos primarios y secundarios

Puede crear un nuevo ámbito secundario llamando a un script o una función. El ámbito de llamada es el ámbito primario. El script o función denominado es el ámbito secundario. Las funciones o scripts que llama pueden llamar a otras funciones, creando una jerarquía de ámbitos secundarios cuyo ámbito raíz es el ámbito global.

Nota

Las funciones de un módulo no se ejecutan en un ámbito secundario del ámbito de llamada. Los módulos tienen su propio estado de sesión que está vinculado al ámbito en el que se importó el módulo. Todo el código de módulo se ejecuta en una jerarquía específica del módulo de ámbitos que tiene su propio ámbito raíz. Para obtener más información, consulte la sección módulos de de este artículo.

Cuando se crea un ámbito secundario, incluye todos los alias y variables que tienen la opción AllScope y algunas variables automáticas. Esta opción se describe más adelante en este artículo.

A menos que los elementos sean privados explícitamente, los elementos del ámbito primario están disponibles para el ámbito secundario. Los elementos que cree o cambie en un ámbito secundario no afectan al ámbito primario, a menos que especifique explícitamente el ámbito al crear los elementos.

Para buscar los elementos en un ámbito determinado, use el parámetro 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

Cuando se hace una referencia a una variable, alias o función, PowerShell busca en el ámbito actual. Si no se encuentra el elemento, se busca en el ámbito primario. Esta búsqueda se repite hasta el ámbito global. Si una variable es privada en un ámbito primario, la búsqueda continúa a través de la cadena de ámbito. ejemplo 4 muestra el efecto de una variable privada en una búsqueda de ámbito.

Nombres de ámbitos de PowerShell

PowerShell define nombres para algunos ámbitos para permitir un acceso más sencillo a ese ámbito. PowerShell define los siguientes ámbitos con nombre:

  • global: el ámbito que está en vigor cuando PowerShell se inicia o cuando se crea una nueva sesión o un espacio de ejecución. Las variables y funciones presentes cuando se inicia PowerShell, como las variables automáticas y las variables de preferencia, se crean en el ámbito global. Las variables, alias y funciones de los perfiles de PowerShell también se crean en el ámbito global. El ámbito global es el ámbito primario raíz en un espacio de ejecución.
  • local: ámbito actual. El ámbito local puede ser el ámbito global o cualquier otro ámbito.
  • script: ámbito que se crea mientras se ejecuta un archivo de script. Los comandos del script se ejecutan en el ámbito del script. Para los comandos de un script, el ámbito del script es el ámbito local.

En el caso de los cmdlets que admiten ámbitos, se puede hacer referencia a los ámbitos mediante un número que describe la posición relativa de un ámbito a otro. El ámbito 0 denota el ámbito actual (local), el ámbito 1 es el primario del ámbito actual, el ámbito 2 es el abuelo del ámbito actual. Este patrón continúa hasta llegar al ámbito raíz.

Modificadores de ámbito

Una variable, alias o nombre de función puede incluir cualquiera de los siguientes modificadores de ámbito opcionales:

  • : especifica que el nombre existe en el ámbito de global de .

  • : especifica que el nombre existe en el ámbito de local de . El ámbito actual es siempre el ámbito de local.

  • private:: especifica que el nombre es privado y solo es visible para el ámbito actual.

    Nota

    private: no es un ámbito. Es una opción que cambia la accesibilidad de un elemento fuera del ámbito en el que se define.

  • script:: especifica que el nombre existe en el ámbito Script. ámbito de script es el ámbito del archivo de script antecesor más cercano o global si no hay ningún archivo de script antecesor más cercano.

  • using:: se usa para acceder a variables definidas en otro ámbito mientras se ejecutan scripts a través de cmdlets como Start-Job y Invoke-Command.

  • workflow:: especifica que el nombre existe dentro de un flujo de trabajo. Nota: Los flujos de trabajo no se admiten en PowerShell v6 ni en versiones posteriores.

  • : un modificador creado por un proveedor de de PSDrive de PowerShell . Por ejemplo:

    Namespace Descripción
    Alias: Alias definidos en el ámbito actual
    Env: Variables de entorno definidas en el ámbito actual
    Function: Funciones definidas en el ámbito actual
    Variable: Variables definidas en el ámbito actual

El ámbito predeterminado de los scripts es el ámbito de script. El ámbito predeterminado de las funciones y alias es el ámbito local, incluso si se definen en un script.

Uso de modificadores de ámbito

Para especificar el ámbito de una nueva variable, alias o función, use un modificador de ámbito.

La sintaxis de un modificador de ámbito en una variable es:

$[<scope-modifier>:]<name> = <value>

La sintaxis de un modificador de ámbito en una función es:

function [<scope-modifier>:]<name> {<function-body>}

El comando siguiente, que no usa un modificador de ámbito, crea una variable en el ámbito de local actual o :

$a = "one"

Para crear la misma variable en el ámbito de global de , use el modificador de ámbito :

$global:a = "one"
Get-Variable a | Format-List *

Observe los valores de propiedad Visibility y opciones de .

Name        : a
Description :
Value       : one
Visibility  : Public
Module      :
ModuleName  :
Options     : None
Attributes  : {}

Compárelo con una variable privada:

$private:pVar = 'Private variable'
Get-Variable pVar | Format-List *

Con el modificador de ámbito de se establece la propiedad Opciones de en .

Name        : pVar
Description :
Value       : Private variable
Visibility  : Public
Module      :
ModuleName  :
Options     : Private
Attributes  : {}

Para crear la misma variable en el ámbito del script de , use el modificador de ámbito script::

$script:a = "one"

También puede usar un modificador de ámbito con funciones. La siguiente definición de función crea una función en el ámbito de global :

function global:Hello {
  Write-Host "Hello, World"
}

También puede usar modificadores de ámbito para hacer referencia a una variable en un ámbito diferente. El siguiente comando hace referencia a la variable $test, primero en el ámbito local y, a continuación, en el ámbito global:

$test
$global:test

Modificador de ámbito using:

Using es un modificador de ámbito especial que identifica una variable local en un comando remoto. Sin un modificador, PowerShell espera que las variables de los comandos remotos se definan en la sesión remota.

El modificador de ámbito using se introduce en PowerShell 3.0.

Para cualquier script o comando que se ejecute fuera de la sesión, necesita el modificador de ámbito using para insertar valores de variable desde el ámbito de la sesión de llamada, para que el código fuera de la sesión pueda acceder a ellos. El modificador de ámbito using se admite en los contextos siguientes:

  • Comandos ejecutados de forma remota, iniciados con Invoke-Command mediante el ComputerName, hostName, SSHConnection o parámetros de sesión (sesión remota)
  • Trabajos en segundo plano, iniciados con Start-Job (sesión fuera del proceso)
  • Trabajos de subproceso, iniciados a través de Start-ThreadJob o ForEach-Object -Parallel (sesión de subproceso independiente)

Dependiendo del contexto, los valores de las variables incrustadas son copias independientes de los datos en el ámbito del autor de la llamada o las referencias a ellos. En las sesiones remotas y fuera de proceso, siempre son copias independientes.

Para obtener más información, vea about_Remote_Variables.

En las sesiones de subproceso, se pasan por referencia. Esto significa que es posible modificar variables de ámbito secundario en un subproceso diferente. Para modificar variables de forma segura, se requiere la sincronización de subprocesos.

Para obtener más información, consulte:

  • Start-ThreadJob
  • ForEach-Object

Serialización de valores de variable

Los comandos ejecutados de forma remota y los trabajos en segundo plano se ejecutan fuera de proceso. Las sesiones fuera de proceso usan la serialización y deserialización basada en XML para que los valores de las variables estén disponibles en los límites del proceso. El proceso de serialización convierte objetos en un PSObject que contiene las propiedades de los objetos originales, pero no sus métodos.

Para un conjunto limitado de tipos, la deserialización vuelve a hidratar los objetos al tipo original. El objeto rehidratado es una copia de la instancia de objeto original. Tiene las propiedades y métodos de tipo. Para tipos simples, como System.Version, la copia es exacta. En el caso de tipos complejos, la copia es imperfecta. Por ejemplo, los objetos de certificado rehidratados no incluyen la clave privada.

Las instancias de todos los demás tipos son instancias de PSObject. La propiedad PSTypeNames contiene el nombre de tipo original con el prefijo deserializado, por ejemplo, Deserialized.System.Data.DataTable

Opción AllScope

Las variables y alias tienen una propiedad Option que puede tomar un valor de AllScope. Los elementos que tienen la propiedad AllScope se convierten en parte de los ámbitos secundarios que cree, aunque no son heredados retroactivamente por ámbitos primarios.

Un elemento que tiene la propiedad AllScope está visible en el ámbito secundario y forma parte de ese ámbito. Los cambios en el elemento de cualquier ámbito afectan a todos los ámbitos en los que se define la variable.

Administración del ámbito

Varios cmdlets tienen un parámetro Scope que permite obtener o establecer (crear y cambiar) elementos en un ámbito determinado. Use el comando siguiente para buscar todos los cmdlets de la sesión que tienen un parámetro Scope de :

Get-Help * -Parameter scope

Para buscar las variables que están visibles en un ámbito determinado, use el parámetro Scope de Get-Variable. Las variables visibles incluyen variables globales, variables en el ámbito primario y variables en el ámbito actual.

Por ejemplo, el siguiente comando obtiene las variables visibles en el ámbito local:

Get-Variable -Scope local

Para crear una variable en un ámbito determinado, use un modificador de ámbito o el parámetro Scope de . El comando siguiente crea una variable en el ámbito global:

New-Variable -Scope global -Name a -Value "One"

También puede usar el parámetro Scope de los cmdlets New-Alias, Set-Aliaso 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, use el cmdlet Get-Item cuando esté en el ámbito. El cmdlet Get-Item no tiene un parámetro Scope.

Nota

Para los cmdlets que usan el parámetro Scope de , también puede hacer referencia a ámbitos por número. El número describe la posición relativa de un ámbito a otro. El ámbito 0 representa el ámbito actual o local. El ámbito 1 indica el ámbito primario inmediato. El ámbito 2 indica el elemento primario del ámbito primario, etc. Los ámbitos numerados son útiles si ha creado muchos ámbitos recursivos.

Uso de la notación de origen de puntos con ámbito

Los scripts y las funciones siguen las reglas de ámbito. Los crea en un ámbito determinado y solo afectan a ese ámbito, a menos que use un parámetro de cmdlet o un modificador de ámbito para cambiar ese ámbito.

Sin embargo, puede agregar el contenido de un script o función al ámbito actual mediante la notación dot-source. Al ejecutar un script o una función mediante la notación dot-source, se ejecuta en el ámbito actual. Las funciones, alias y variables del script o la función se agregan al ámbito actual.

Por ejemplo, para ejecutar el script de Sample.ps1 desde el directorio C:\Scripts en el ámbito de script (el valor predeterminado para scripts), solo tiene que escribir la ruta de acceso completa al archivo de script en la línea de comandos.

c:\scripts\sample.ps1

Un archivo de script debe tener una extensión de archivo .ps1 para que sea ejecutable. Los archivos que tienen espacios en su ruta de acceso deben incluirse entre comillas. Si intenta ejecutar la ruta de acceso entre comillas, PowerShell muestra el contenido de la cadena entrecomillada en lugar de ejecutar el script. El operador de llamada (&) permite ejecutar el contenido de la cadena que contiene el nombre de archivo.

El uso del operador de llamada para ejecutar una función o un script lo ejecuta en el ámbito del script. El uso del operador de llamada no es diferente de ejecutar el script por nombre.

& c:\scripts\sample.ps1

Puede obtener más información sobre el operador de llamada en about_Operators.

Para ejecutar el script de Sample.ps1 en el ámbito local, escriba un punto y un espacio (. ) antes de la ruta de acceso al script:

. c:\scripts\sample.ps1

Ahora, las funciones, alias o variables definidas en el script se agregan al ámbito actual.

Restricción sin ámbito

PowerShell tiene algunas opciones y características que son similares al ámbito y pueden interactuar con ámbitos. Esta característica puede confundirse con el ámbito o el comportamiento del ámbito.

Las sesiones, los módulos y las solicitudes anidadas son entornos independientes, no ámbitos secundarios del ámbito global de la sesión.

Sesiones

Una sesión es un entorno en el que se ejecuta PowerShell. Al crear una sesión en un equipo remoto, PowerShell establece una conexión persistente al equipo remoto. La conexión persistente le permite usar la sesión para varios comandos relacionados.

Dado que una sesión es un entorno independiente, tiene su propio ámbito, pero una sesión no es un ámbito secundario de la sesión en la que se creó. La sesión comienza con su propio ámbito global. Este ámbito es independiente del ámbito global de la sesión. Puede crear ámbitos secundarios en la sesión. Por ejemplo, puede ejecutar un script para crear un ámbito secundario en una sesión.

Módulos

Puede usar un módulo de PowerShell para compartir y entregar herramientas de PowerShell. Un módulo es una unidad que puede contener cmdlets, scripts, funciones, variables, alias y otros elementos útiles. A menos que se exporte explícitamente (mediante Export-ModuleMember o el manifiesto del módulo), no se puede acceder a los elementos de un módulo fuera del módulo. Por lo tanto, puede agregar el módulo a la sesión y usar los elementos públicos sin preocuparse de que los demás elementos podrían invalidar los cmdlets, scripts, funciones y otros elementos de la sesión.

De forma predeterminada, los módulos se cargan en el ámbito de nivel raíz (global) del espacio de ejecución. La importación de un módulo no cambia el ámbito. Dentro de la sesión, los módulos tienen su propio ámbito. Tenga en cuenta el siguiente módulo C:\temp\mod1.psm1:

$a = "Hello"

function foo {
    "`$a = $a"
    "`$global:a = $global:a"
}

Ahora creamos una variable global $a, asígnele un valor y llame a la función foo.

$a = "Goodbye"
foo

El módulo declara la variable $a en el ámbito del módulo y, a continuación, la función foo genera el valor de la variable en ambos ámbitos.

$a = Hello
$global:a = Goodbye

Los módulos crean contenedores de ámbito paralelo vinculados al ámbito en el que se importaron. Los elementos exportados por el módulo están disponibles a partir del nivel de ámbito en el que se importan. Los elementos no exportados desde el módulo solo están disponibles en el contenedor de ámbito del módulo. Las funciones del módulo pueden tener acceso a elementos del ámbito en el que se importaron, así como elementos del contenedor de ámbito del módulo.

Si carga Module2 desde dentro deModule1, Module2 se carga en el contenedor de ámbito de Module1. Las exportaciones de Module2 se colocan en el ámbito del módulo actual de Module1. Si usa Import-Module -Scope local, las exportaciones se colocan en el objeto de ámbito actual en lugar de en el nivel superior. Si está en un módulo y carga otro módulo mediante Import-Module -Scope global (o Import-Module -Global), ese módulo y sus exportaciones se cargan en el ámbito global en lugar del ámbito local del módulo. La característica WindowsCompatibility hace esto para importar módulos proxy en el estado de sesión global.

Avisos anidados

Los avisos anidados no tienen su propio ámbito. Cuando se escribe un símbolo del sistema anidado, el aviso anidado es un subconjunto del entorno. Sin embargo, permanece dentro del ámbito local.

Los scripts tienen su propio ámbito. Si está depurando un script y llega a un punto de interrupción en el script, escriba el ámbito del script.

Opción privada

Los alias y las variables tienen una propiedad option que puede tomar un valor de . Los elementos que tienen la opción Private se pueden ver y cambiar en el ámbito en el que se crean, pero no se pueden ver ni cambiar fuera de ese ámbito.

Por ejemplo, si crea una variable que tiene una opción privada en el ámbito global y, a continuación, ejecuta un script, Get-Variable comandos del script no muestran la variable privada. El uso del modificador de ámbito global en esta instancia no muestra la variable privada.

Puede usar el parámetro Option del New-Variable, Set-Variable, New-Aliasy Set-Alias cmdlets para establecer el valor de la propiedad Option en Private.

Visibilidad

La propiedad Visibility de una variable o alias determina si puede ver el elemento fuera del contenedor, en el que se creó. Un contenedor podría ser un módulo, un script o un complemento. La visibilidad está diseñada para contenedores de la misma manera que el valor de la propiedad option está diseñado para ámbitos.

La propiedad Visibility toma los valores y . Los elementos que tienen visibilidad privada solo se pueden ver y cambiar en el contenedor en el que se crearon. Si se agrega o importa el contenedor, los elementos que tienen visibilidad privada no se pueden ver ni cambiar.

Dado que la visibilidad está diseñada para contenedores, funciona de forma diferente en un ámbito.

  • Si crea un elemento que tiene visibilidad privada en el ámbito global, no podrá ver ni cambiar el elemento en ningún ámbito.
  • Si intenta ver o cambiar el valor de una variable que tiene visibilidad privada, PowerShell devuelve un mensaje de error.

Puede usar los cmdlets New-Variable y Set-Variable para crear una variable que tenga visibilidad privada.

Ejemplos

Ejemplo 1: Cambiar un valor de variable solo 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 siguiente comando:

PS>  $ConfirmPreference
High

Cree un script Scope.ps1 que contenga los siguientes comandos:

$ConfirmPreference = "Low"
"The value of `$ConfirmPreference is $ConfirmPreference."

Ejecute el script. El script cambia el valor de la variable $ConfirmPreference y, a continuación, informa de su valor en el ámbito del script. La salida debe ser similar a la siguiente salida:

The value of $ConfirmPreference is Low.

A continuación, pruebe el valor actual de la variable $ConfirmPreference en el ámbito actual.

PS>  $ConfirmPreference
High

En este ejemplo se muestra que los cambios en el valor de una variable en el ámbito del script no afectan al valor de la variable en el ámbito primario.

Ejemplo 2: Visualización de un valor de variable en distintos ámbitos

Puede usar modificadores de ámbito para ver el valor de una variable en el ámbito local y en un ámbito primario.

En primer lugar, defina una variable $test en el ámbito global.

$test = "Global"

A continuación, cree un script Sample.ps1 que defina la variable $test. En el script, use un modificador de ámbito para hacer referencia a las versiones globales o locales de la variable $test.

En Sample.ps1:

$test = "Local"
"The local value of `$test is $test."
"The global value of `$test is $global:test."

Al ejecutar Sample.ps1, la salida debe ser similar a la siguiente salida:

The local value of $test is Local.
The global value of $test is Global.

Una vez completado el script, solo se define el valor global de $test en la sesión.

PS> $test
Global

Ejemplo 3: Cambiar el valor de una variable en un ámbito primario

A menos que proteja un elemento mediante la opción Private u otro método, puede ver y cambiar el valor de una variable en un ámbito primario.

En primer lugar, defina una variable $test en el ámbito global.

$test = "Global"

A continuación, cree un script Sample.ps1 que defina la variable $test. En el script, use un modificador de ámbito para hacer referencia a las versiones globales o locales de la variable $test.

En Sample.ps1:

$global:test = "Local"
"The global value of `$test is $global:test."

Una vez completado el script, se cambia el valor global de $test.

PS> $test
Local

Ejemplo 4: Creación de una variable privada

Una variable se puede hacer privada mediante el modificador de ámbito o creando la variable con la propiedad Option establecida en . Las variables privadas solo se pueden ver o cambiar en el ámbito en el que se crearon.

En este ejemplo, el script ScopeExample.ps1 crea cinco funciones. La primera función llama a la siguiente función, que crea un ámbito secundario. Una de las funciones tiene una variable privada que solo se puede ver en el ámbito en el que se creó.

PS> Get-Content ScopeExample.ps1
# Start of ScopeExample.ps1
function funcA {
    "Setting `$funcAVar1 to 'Value set in funcA'"
    $funcAVar1 = "Value set in funcA"
    funcB
}

function funcB {
    "In funcB before set -> '$funcAVar1'"
    $private:funcAVar1 = "Locally overwrite the value - child scopes can't see me!"
    "In funcB after set  -> '$funcAVar1'"
    funcC
}

function funcC {
    "In funcC before set -> '$funcAVar1' - should be the value set in funcA"
    $funcAVar1 = "Value set in funcC - Child scopes can see this change."
    "In funcC after set  -> '$funcAVar1'"
    funcD
}

function funcD {
    "In funcD before set -> '$funcAVar1' - should be the value from funcC."
    $funcAVar1 = "Value set in funcD"
    "In funcD after set  -> '$funcAVar1'"
    '-------------------'
    ShowScopes
}

function ShowScopes {
    $funcAVar1 = "Value set in ShowScopes"
    "Scope [0] (local)  `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 0 -ValueOnly)'"
    "Scope [1] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 1 -ValueOnly)'"
    "Scope [2] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 2 -ValueOnly)'"
    "Scope [3] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 3 -ValueOnly)'"
    "Scope [4] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 4 -ValueOnly)'"
}
funcA
# End of ScopeExample.ps1
PS> .\ScopeExample.ps1

La salida muestra el valor de la variable en cada ámbito. Puede ver que la variable privada solo está visible en funcB, el ámbito en el que se creó.

Setting $funcAVar1 to 'Value set in funcA'
In funcB before set -> 'Value set in funcA'
In funcB after set  -> 'Locally overwrite the value - child scopes can't see me!'
In funcC before set -> 'Value set in funcA' - should be the value set in funcA
In funcC after set  -> 'Value set in funcC - Child scopes can see this change.'
In funcD before set -> 'Value set in funcC - Child scopes can see this change.' - should be the value from funcC.
In funcD after set  -> 'Value set in funcD'
-------------------
Scope [0] (local)  $funcAVar1 = 'Value set in ShowScopes'
Scope [1] (parent) $funcAVar1 = 'Value set in funcD'
Scope [2] (parent) $funcAVar1 = 'Value set in funcC - Child scopes can see this change.'
Scope [3] (parent) $funcAVar1 = 'Locally overwrite the value - child scopes can't see me!'
Scope [4] (parent) $funcAVar1 = 'Value set in funcA'

Como se muestra en la salida de ShowScopes, puede acceder a variables desde otros ámbitos mediante Get-Variable y especificar un número de ámbito.

Ejemplo 5: Uso de una variable local en un comando remoto

Para las variables de un comando remoto creado en la sesión local, use el modificador de ámbito using. PowerShell supone que las variables de los comandos remotos se crearon en la sesión remota.

La sintaxis es:

$using:<VariableName>

Por ejemplo, los siguientes comandos crean una variable $Cred en la sesión local y, a continuación, usan la variable $Cred en un comando remoto:

$Cred = Get-Credential
Invoke-Command $s {Remove-Item .\Test*.ps1 -Credential $using:Cred}

El modificador de ámbito using se introdujo en PowerShell 3.0.

Consulte también