Variables definidas por el usuario

 

Se aplica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Última modificación del tema: 2006-09-21

Una variable es una ubicación para almacenar información. A diferencia de lo que ocurre en muchos entornos de programación, en el Shell de administración de Exchange no hay que declarar una variable antes de utilizarla.

Se designa una variable anteponiendo a la cadena un símbolo de dólar ($). Debe especificar la cadena entre llaves({ }) si la cadena contiene espacios u otros caracteres especiales. Utilizando la notación de referencia de matriz ([ ]), puede direccionar los elementos de una variable de tabla de matriz o de hash.

Para obtener más información acerca de las matrices, vea Matrices.

Utilización de variables para almacenar valores

Las variables son muy útiles si se desea almacenar un valor. Puede asignar valores a variables utilizando un operador de asignación. Para obtener más información acerca de operadores, vea Sintaxis.

Por ejemplo, para asignar un valor de 8 a la variable $Example, utilice el siguiente comando:

$Example = 8

Este comando asigna el número entero 8 a la variable $Example. Después puede llamar a la variable $Example en otro comando para recuperar el valor. Los valores especificados en un a variable se tratan tal como si el valor que contiene se hubiera escrito en la ubicación en la que se especifica la variable. Por ejemplo, los siguientes dos comandos son equivalentes si al $Example2 le es asignado el valor "Hello":

Write-Host $Example2
Write-Host "Hello"

Almacenamiento de los resultados de un comando en una variable

También puede almacenar el resultado de comandos en una variable para utilizarse más adelante. Cuando asigna un comando a una variable, el comando se evalúa en el momento en que se lo ejecuta. El resultado de ese comando se asigna a la variable. Por ejemplo, si ejecuta $CurrentDate = Get-Date en la línea de comando y después llama varias veces a $CurrentDate durante varios segundos, el valor que se notifica cada vez que se llama a la variable es siempre el mismo.

Cuando asigna los resultados de un comando a una variable, puede obtener acceso a las propiedades y a los métodos del objeto subyacente. Por ejemplo, para ver las propiedades y métodos que están disponibles cuando asigna Get-Date a $CurrentDate, puede utilizar el comando $CurrentDate | Get-Member. Cuando utiliza el comando $CurrentDate | Get-Member, se devuelven las siguientes propiedades en una lista:

Date                 Property       System.DateTime Date {get;}
Day                  Property       System.Int32 Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       System.Int32 DayOfYear {get;}
Hour                 Property       System.Int32 Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       System.Int32 Millisecond {get;}
Minute               Property       System.Int32 Minute {get;}
Month                Property       System.Int32 Month {get;}
Second               Property       System.Int32 Second {get;}
Ticks                Property       System.Int64 Ticks {get;}
TimeOfDay            Property       System.TimeSpan TimeOfDay {get;}
Year                 Property       System.Int32 Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ($this.Di...

Después puede llamar a cualquiera de estas propiedades escribiendo la variable, un punto (.) y la propiedad que desea ver. Por ejemplo, para ver el año que está almacenado en una variable, utilice el siguiente comando:

$CurrentDate.Year

A través del acceso a las propiedades de una variable, puede manipular y utilizar fácilmente cada fragmento de información almacenado en ella sin el análisis de texto.

Almacenamiento de los resultados del comando Dir en una variable

También puede almacenar el resultado del comando Dir en una variable. Puesto que el comando Dir devuelve varias filas cuando se ejecuta, cada fila que se devuelve se almacena en una variable como un nuevo elemento de matriz. Después puede tener acceso a cada objeto de archivo en una matriz recién creada. Para obtener más información acerca de las matrices, vea Matrices.

El siguiente comando asigna el resultado del comando Dir a la variable $DirOutput:

$DirOutput = Dir

Tras ello, puede seleccionar un objeto de archivo específico especificando el índice de matriz que desea visualizar tal como sigue:

$DirOutput[1].Name

O puede crear un bucle sencillo que recorre toda la matriz y muestra el nombre y el tamaño de cada archivo almacenado en la matriz tal como sigue:

0..$DirOutput.Length | ForEach { $DirOutput[$_].Name + " is " + $DirOutput[$_].Length + " bytes long." }

La siguiente lista examina este ejemplo:

  • El comando 0..$DirOutput.Length instruye al Shell de administración de Exchange para dar como resultado un número entero desde 0 hasta la longitud máxima de la matriz que está almacenada en la variable $DirOutput.

  • El resultado del comando 0..$DirOutput.Length se envía al comando ForEach, que hace un bucle a través de cada elemento de la matriz hasta que alcanza el final de la matriz. El comando ForEach ejecuta los comandos que están entre llaves "{ }".

  • La variable $_ almacena el objeto actual que se encuentra en la canalización. En este caso, el objeto de la canalización es un número entero que es producido por el comando 0..$DirOutput.Length cuando cuenta desde 0 hasta la longitud máxima de la matriz. Esta variable se utiliza en el comando $DirOutput[$_].Name y en el comando $DirOutput[$_].Length para seleccionar el elemento de matriz al que se va a tener acceso.

  • Para obtener más información acerca de la variable $_, vea Variables de shell.

  • Los signos de adición " + " concatenan el resultado del comando $DirOutput[$_].Name y del comando $DirOutput[$_].Length, junto con las cadenas suministradas para crear un resultado similar al siguiente:

    abv_dg.dll is 416144 bytes long.
    addxa.dll is 285056 bytes long.
    ASDat.MSI is 5626880 bytes long.
    ASEntDat.MSI is 5626880 bytes long.
    ASEntIRS.MSI is 910336 bytes long.
    ASEntSig.MSI is 45056 bytes long.
    BPA.Common.dll is 211848 bytes long.
    BPA.ConfigCollector.dll is 101272 bytes long.
    BPA.NetworkCollector.dll is 52128 bytes long.
    

Estos ejemplos muestran que se puede utilizar la propiedad Length más de una vez para mostrar información diferente acerca de la misma variable. Puede hacer esto porque más de un tipo de datos está almacenado en la variable $DirOutput. El primer tipo de datos es el propio objeto de directorio y el segundo tipo de datos es el objeto de archivo. Cuando ejecute el comando $DirObject.Length sin especificar un índice de matriz, está logrando acceso a los tipos de objeto primario de directorio almacenados en la matriz. Cuando especifica un índice de matriz, como $DirObject[5].Length, está logrando acceso a los objetos secundarios de archivo almacenados en el objeto de directorio.

Este comportamiento existe en muchos objetos. Normalmente puede tener acceso a muchos niveles de datos de objeto contenidos en una sola variable. La capacidad para obtener acceso a estos datos hace muy flexible el Shell de administración de Exchange.