about_Assignment_Operators

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

Insertar la introducción aquí.

TEMA

about_assignment_operators

DESCRIPCIÓN BREVE

Describe cómo se utilizan los operadores para asignar valores a variables.

DESCRIPCIÓN LARGA

Los operadores de asignación asignan uno o varios valores a una variable. Pueden realizar operaciones numéricas en los valores antes de la asignación.

Windows PowerShell® admite los siguientes operadores de asignación.

    Operator  Description  
    -------   -----------
    =         Sets the value of a variable to the specified value.

    +=        Increases the value of a variable by the specified value, or 
              appends the specified value to the existing value.

    -=        Decreases the value of a variable by the specified value.
 
    *=        Multiplies the value of a variable by the specified value, or
              appends the specified value to the existing value.
 
    /=        Divides the value of a variable by the specified value.
 
    %=        Divides the value of a variable by the specified value and 
              then assigns the remainder (modulus) to the variable.

    ++        Increases the value of a variable, assignable property, or 
              array element by 1.

    --        Decreases the value of a variable, assignable property, or 
              array element by 1.

SINTAXIS

La sintaxis de los operadores de asignación es la siguiente:

<assignable-expression> <assignment-operator> <value>

Las expresiones asignables incluyen variables y propiedades. El valor puede ser un valor único, una matriz de valores, o un comando, una expresión o una instrucción.

Los operadores de incremento y decremento son operadores unarios. Cada uno de ellos tiene versiones de prefijo y postfijo.

        <assignable-expression><operator>
        <operator><assignable-expression>

La expresión asignable debe ser un número o debe poder convertirse en un número.

ASIGNACIÓN DE VALORES

Las variables son espacios de memoria con nombre que almacenan valores. Los valores se almacenan en variables mediante el operador de asignación (=). El nuevo valor puede reemplazar el valor existente de la variable o puede anexar un valor nuevo al existente.

El operador de asignación básica es el signo igual (=) (61 en ASCII). Por ejemplo, la instrucción siguiente asigna el valor Windows PowerShell a la variable $MyShell:

        $MyShell = "Windows PowerShell" 

Si asigna un valor a una variable en Windows PowerShell, se crea la variable si no existe. Por ejemplo, la primera de las dos instrucciones de asignación siguientes crea la variable $a y le asigna un valor de 6. La segunda instrucción de asignación asigna un valor de 12 a $a. La primera instrucción crea una nueva variable. La segunda instrucción solo cambia su valor:

        $a = 6
        $a = 12

Las variables de Windows PowerShell no tienen un tipo de datos concreto a menos que las convierta. Si una variable contiene un único objeto, la variable toma el tipo de datos de ese objeto. Cuando una variable contiene una colección de objetos, la variable tiene el tipo de datos System.Object. Por lo tanto, puede asignar cualquier tipo de objeto a la colección. En el ejemplo siguiente se muestra que puede agregar objetos de proceso, objetos de servicio, cadenas y enteros a una variable sin generar un error:

        $a = get-process
        $a += get-service
        $a += "string"
        $a += 12

Como el operador de asignación (=) tiene una prioridad menor que el operador de canalización (|), los paréntesis no son necesarios para asignar el resultado de un comando de canalización a una variable. Por ejemplo, el comando siguiente ordena los servicios del equipo y después asigna los servicios ordenados a la variable $a:

        $a = get-service | sort name

También puede asignar el valor creado por una instrucción a una variable, como en el ejemplo siguiente:

        $a = if ($b -lt 0) { 0 } else { $b }

Este ejemplo asigna 0 a la variable $a si el valor de $b es menor que 0. Asigna el valor de $b a $a si el valor de $b no es menor que cero.

EL OPERADOR DE ASIGNACIÓN (=)

El operador de asignación (=) asigna valores a las variables. Si la variable ya tiene un valor, el operador de asignación (=) reemplaza el valor sin previo aviso.

La instrucción siguiente asigna el valor entero 6 a la variable $a:

        $a = 6 

Para asignar un valor de cadena a una variable, escriba el valor de cadena entre comillas, como se muestra a continuación:

        $a = "baseball" 

Para asignar una matriz (varios valores) a una variable, separe los valores con comas, como se indica a continuación:

        $a = "apple", "orange", "lemon", "grape"

Para asignar una tabla hash a una variable, utilice la notación de tabla hash estándar en Windows PowerShell. Escriba una arroba (@) seguida de los pares de clave y valor separados por punto y coma (;) y entre llaves ({ }). Por ejemplo, para asignar una tabla hash a la variable $a, escriba:

        $a = @{one=1; two=2; three=3} 

Para asignar valores hexadecimales a una variable, especifique "0x" antes del valor. Windows PowerShell convierte el valor hexadecimal (0x10) a un valor decimal (en este caso, 16) y asigna ese valor a la variable $a. Por ejemplo, para asignar un valor de 0x10 a la variable $a, escriba:

        $a = 0x10 

Para asignar un valor exponencial a una variable, escriba el número de la raíz, la letra "e" y un número que represente un múltiplo de 10. Por ejemplo, para asignar a la variable $a un valor de 3,1415 elevado a 1.000, escriba:

        $a = 3.1415e3 

Windows PowerShell también puede convertir kilobytes (KB), megabytes (MB) y gigabytes (GB) en bytes. Por ejemplo, para asignar un valor de 10 kilobytes a la variable $a, escriba:

        $a = 10kb

LA ASIGNACIÓN MEDIANTE EL OPERADOR DE SUMA (+=)

La asignación mediante el operador de suma (+=) incrementa el valor de una variable o anexa el valor especificado al valor existente. La acción depende de si la variable tiene un tipo numérico o de cadena y de si la variable contiene un único valor (escalar) o varios valores (una colección).

El operador += combina dos operaciones. En primer lugar, agrega y, después, asigna. Por lo tanto, las instrucciones siguientes son equivalentes:

        $a += 2
        $a = ($a + 2)

Si la variable contiene un valor numérico único, el operador += incrementa el valor existente la cantidad del lado derecho del operador. A continuación, el operador asigna el valor resultante a la variable. En el ejemplo siguiente se muestra cómo utilizar el operador += para aumentar el valor de una variable:

        C:\PS> $a = 4
        C:\PS> $a += 2
        C:\PS> $a
        6

Cuando el valor de la variable es una cadena, el valor del lado derecho del operador se anexa a la cadena como se indica a continuación:

        C:\PS> $a = "Windows"
        C:\PS> $a += " PowerShell"
        C:\PS> $a
        Windows PowerShell 

Cuando el valor de la variable es una matriz, el operador += anexa los valores del lado derecho del operador a la matriz. Salvo que la matriz tenga un tipo explícito mediante conversión, puede anexar cualquier tipo de valor a la matriz, como se indica a continuación:

        C:\PS> $a = 1,2,3
        C:\PS> $a += 2
        C:\PS> $a
        1
        2
        3
        2
        C:\PS> $a += "String"
        C:\PS> $a
        1
        2
        3
        2
        String

Si el valor de una variable es una tabla hash, el operador += anexa el valor del lado derecho del operador a la tabla hash. Sin embargo, como el único tipo que puede agregar a una tabla hash es otra tabla hash, todas las demás asignaciones producirán un error.

Por ejemplo, el siguiente comando asigna una tabla hash a la variable $a. Después, utiliza el operador += para anexar otra tabla hash a la tabla hash existente, con lo que agrega eficazmente un nuevo par de clave y valor a la tabla hash existente. Este comando se ejecuta correctamente, tal y como se muestra en la salida:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += @{mode = "write"}
        C:\PS> $a
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        mode                           write
        c                              3

El comando siguiente intenta anexar un entero (1) a la tabla hash en la variable $a. Este comando no se ejecuta correctamente:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += 1
        You can add another hash table only to a hash table.
        At line:1 char:6
        + $a += <<<<  1

ASIGNACIÓN MEDIANTE OPERADOR DE RESTA (-=)

La asignación mediante el operador de resta (-=) disminuye el valor de una variable en la proporción que indique el valor que se especifique en el lado derecho del operador. Este operador no se puede utilizar con variables de cadena y no puede usarse para quitar un elemento de una colección.

El operador -= combina dos operaciones. En primer lugar, resta y, después, asigna. Por lo tanto, las instrucciones siguientes son equivalentes:

        $a -= 2
        $a = ($a - 2)

En el ejemplo siguiente se muestra cómo utilizar el operador -= para disminuir el valor de una variable:

        C:\PS> $a = 8
        C:\PS> $a -= 2
        C:\PS> $a
        6

También puede utilizar el operador de asignación -= para disminuir el valor de un miembro de una matriz numérica. Para ello, especifique el índice del elemento de la matriz que desee cambiar. En el ejemplo siguiente, el valor del tercer elemento de una matriz (elemento 2) se reduce en 1:

        C:\PS> $a = 1,2,3
        C:\PS> $a[2] -= 1.
        C:\PS> $a
        1
        2
        2

No se puede utilizar el operador -= para eliminar los valores de una variable. Para eliminar todos los valores asignados a una variable, use los cmdlets Clear-Item o Clear-Variable para asignar un valor $null o "" a la variable.

        $a = $null 

Para eliminar un valor concreto de una matriz, utilice notación de matriz para asignar un valor de $null al elemento en cuestión. Por ejemplo, la instrucción siguiente elimina el segundo valor (posición 1 del índice) de una matriz:

        C:\PS> $a = 1,2,3
        C:\PS> $a
        1
        2
        3

        C:\PS> $a[1] = $null
        C:\PS> $a
        1
        3

Para eliminar una variable, use el cmdlet Remove-Variable. Este método es útil cuando la variable se convierte explícitamente a un tipo de datos concreto y desea una variable sin tipo. El siguiente comando elimina la variable $a:

        remove-variable a

LA ASIGNACIÓN MEDIANTE EL OPERADOR DE MULTIPLICACIÓN (*=)

La asignación mediante el operador de multiplicación (*=) multiplica un valor numérico o anexa el número especificado de copias del valor de cadena de una variable.

Si una variable contiene un valor numérico único, ese valor se multiplica por el valor del lado derecho del operador. Por ejemplo, en el ejemplo siguiente se muestra cómo utilizar el operador *= para multiplicar el valor de una variable:

        C:\PS> $a = 3
        C:\PS> $a *= 4
        C:\PS> $a
        12

En este caso, el operador *= combina dos operaciones. En primer lugar, multiplica y, después, asigna. Por lo tanto, las instrucciones siguientes son equivalentes:

        $a *= 2
        $a = ($a * 2)

Si una variable contiene un valor de cadena, Windows PowerShell anexa el número especificado de cadenas al valor, como se muestra a continuación:

        C:\PS> $a = "file"
        C:\PS> $a *= 4 
        C:\PS> $a
        filefilefilefile

Para multiplicar un elemento de una matriz, utilice un índice para identificar el elemento que desea multiplicar. Por ejemplo, el siguiente comando multiplica el primer elemento de la matriz (posición 0 del índice) por 2:

        $a[0] *= 2

LA ASIGNACIÓN MEDIANTE EL OPERADOR DE DIVISIÓN (/=)

La asignación mediante el operador de división (/=) divide un valor numérico por el valor que se especifica en el lado derecho del operador. El operador no puede utilizarse con variables de cadena.

El operador /= combina dos operaciones. En primer lugar, divide y, después, asigna. Por lo tanto, las dos instrucciones siguientes son equivalentes:

        $a /= 2
        $a = ($a / 2)

Por ejemplo, el comando siguiente utiliza el operador /= para dividir el valor de una variable:

        C:\PS> $a = 8
        C:\PS> $a /=2
        C:\PS> $a
        4

Para dividir un elemento de una matriz, utilice un índice para identificar el elemento que desea cambiar. Por ejemplo, el siguiente comando divide el segundo elemento de la matriz (posición 1 del índice) entre 2:

        $a[1] /= 2

LA ASIGNACIÓN MEDIANTE EL OPERADOR DE MÓDULO (%=)

La asignación mediante el operador de módulo (%=) divide el valor de una variable por el valor en el lado derecho del operador. Entonces, el operador %= asigna el resto (conocido como el módulo) a la variable. Solo puede utilizar este operador cuando una variable contenga un único valor numérico. No puede utilizar este operador si una variable contiene una matriz o una variable de cadena.

El operador %= combina dos operaciones. En primer lugar, divide y determina el resto y, después, asigna el resto a la variable. Por lo tanto, las instrucciones siguientes son equivalentes:

        $a %= 2
        $a = ($a % 2)

En el ejemplo siguiente se muestra cómo utilizar el operador %= para guardar el módulo de un cociente:

        C:\PS> $a = 7
        C:\PS> $a %= 4
        C:\PS> $a
        3

LOS OPERADORES DE INCREMENTO Y DECREMENTO

El operador de incremento (++) aumenta el valor de una variable en 1. Cuando el operador de incremento se utiliza en una instrucción simple, no se devuelve ningún valor. Para ver el resultado, muestre el valor de la variable, como se indica a continuación:

        C:\PS> $a = 7
        C:\PS> ++$a
        C:\PS> $a
        8

Para forzar que se devuelva un valor, especifique la variable y el operador entre paréntesis, como se indica a continuación:

        C:\PS> $a = 7
        C:\PS> (++$a)
        8

El operador de incremento puede colocarse antes (prefijo) o después (postfijo) de una variable. La versión prefija del operador incrementa una variable antes de que su valor se utilice en la instrucción, de la siguiente manera:

        C:\PS> $a = 7
        C:\PS> $c = ++$a
        C:\PS> $a
        8
        C:\PS> $c
        8

La versión postfija del operador incrementa una variable después de que su valor se utilice en la instrucción. En el siguiente ejemplo, las variables $c y $a tienen valores diferentes, ya que el valor se asigna a $c antes de que $a cambie:

        C:\PS> $a = 7
        C:\PS> $c = $a++
        C:\PS> $a
        8
        C:\PS> $c
        7

El operador de decremento (--) disminuye el valor de una variable en 1. Como sucede con el operador de incremento, no se devuelve ningún valor cuando el operador se utiliza en una instrucción sencilla. Utilice paréntesis para devolver un valor, como se indica a continuación:

        C:\PS> $a = 7
        C:\PS> --$a
        C:\PS> $a
        6
        C:\PS> (--$a)
        5

La versión prefija del operador disminuye una variable antes de que su valor se utilice en la instrucción, de la siguiente manera:

        C:\PS> $a = 7
        C:\PS> $c = --$a
        C:\PS> $a
        6
        C:\PS> $c
        6

La versión postfija del operador disminuye una variable después de que su valor se utilice en la instrucción. En el siguiente ejemplo, las variables $d y $a tienen valores diferentes, ya que el valor se asigna a $d antes de que $a cambie:

        C:\PS> $a = 7
        C:\PS> $d = $a--
        C:\PS> $a
        6
        C:\PS> $d
        7

TIPOS DE MICROSOFT .NET FRAMEWORK

De forma predeterminada, si una variable tiene un único valor, el valor que se asigna a la variable determina el tipo de dato de la variable. Por ejemplo, el siguiente comando crea una variable que tiene el tipo de entero (System.Int32):

        $a = 6 

Para buscar el tipo de .NET Framework de una variable, use el método GetType y la propiedad FullName, como se indica a continuación. Asegúrese de incluir los paréntesis después del nombre del método GetType, aunque la llamada al método no tenga argumentos:

        C:\PS> $a = 6 
        C:\PS> $a.gettype().fullname 
        System.Int32 

Para crear una variable que contenga una cadena, asigne un valor de cadena a la variable. Para indicar que el valor es una cadena, inclúyala entre comillas, de la siguiente manera:

        C:\PS> $a = "6"
        C:\PS> $a.gettype().fullname
        System.String

Si el primer valor que se asigna a la variable es una cadena, Windows PowerShell trata todas las operaciones como operaciones de cadena y convierte los nuevos valores a cadenas. Esto sucede en el ejemplo siguiente:

        C:\PS> $a = "file"
        C:\PS> $a += 3
        C:\PS> $a
        file3

Si el primer valor es un entero, Windows PowerShell trata todas las operaciones como operaciones de enteros y convierte los nuevos valores a enteros. Esto sucede en el ejemplo siguiente:

        C:\PS> $a = 6
        C:\PS> $a += "3"
        C:\PS> $a
        9

Puede convertir una nueva variable escalar en cualquier tipo de .NET Framework si coloca el nombre de tipo entre corchetes precediendo el nombre de variable o el primer valor de asignación. Cuando se convierte una variable, puede determinar los tipos de datos que se pueden almacenar en la variable. También puede determinar cómo se comporta la variable cuando la manipula.

Por ejemplo, el siguiente comando convierte la variable a un tipo de cadena:

        C:\PS> [string]$a = 27
        C:\PS> $a += 3
        C:\PS> $a
        273

En el ejemplo siguiente se convierte el primer valor, en vez de convertir la variable:

        $a = [string]27

Cuando se convierte una variable a un tipo concreto, la convención común es convertir la variable, no el valor. Sin embargo, no se puede volver a convertir el tipo de datos de una variable existente si su valor no se puede convertir al nuevo tipo de datos. Para cambiar el tipo de datos, debe reemplazar su valor, como se muestra a continuación:

        C:\PS> $a = "string"
        C:\PS> [int]$a
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:8
        + [int]$a <<<<

        C:\PS> [int]$a =3

Además, si precede un nombre de variable con un tipo de datos, el tipo de esa variable se bloquea, a menos que reemplace de forma explícita el tipo mediante la especificación de otro tipo de datos. Si intenta asignar un valor que no es compatible con el tipo existente y no reemplaza explícitamente el tipo, Windows PowerShell muestra un error, como se muestra en el ejemplo siguiente:

        C:\PS> $a = 3
        C:\PS> $a = "string"

        C:\PS> [int]$a = 3
        C:\PS> $a = "string"
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:3
        + $a <<<<  = "string"

        C:\PS> [string]$a = "string"

En Windows PowerShell, los tipos de datos de las variables que contienen varios elementos en una matriz se tratan de forma diferente de los tipos de datos de las variables que contienen un solo elemento. A menos que un tipo de datos esté asignado concretamente a una variable de matriz, el tipo de datos siempre es System.Object []. Este tipo de datos es concreto de las matrices.

A veces, puede reemplazar el tipo predeterminado si especifica otro tipo. Por ejemplo, el siguiente comando convierte la variable a un tipo de matriz de string []:

        [string []] $a = "one", "two", "three"

Las variables Windows PowerShell pueden ser de cualquier tipo de datos de .NET Framework. Además, puede asignar cualquier tipo de datos de .NET Framework completo que esté disponible en el proceso actual. Por ejemplo, el siguiente comando especifica un tipo de datos System.DateTime:

        [system.datetime]$a = "5/31/2005"

Se asignará un valor a la variable que se ajuste al tipo de datos System.DateTime. El valor de la variable $a sería el siguiente:

        Tuesday, May 31, 2005 12:00:00 AM

ASIGNACIÓN DE VARIAS VARIABLES

En Windows PowerShell, puede asignar valores a varias variables con un solo comando. El primer elemento del valor de asignación está asignado a la primera variable, el segundo elemento se asigna a la segunda variable, el tercer elemento a la tercera variable y así sucesivamente. Por ejemplo, el comando siguiente asigna el valor 1 a la variable $a, el valor 2 a la variable $b y el valor 3 a la variable $c:

        C:\PS> $a, $b, $c = 1, 2, 3

Si el valor de asignación contiene más elementos que variables, todos los valores restantes se asignan a la última variable. Por ejemplo, el comando siguiente contiene tres variables y cinco valores:

        $a, $b, $c = 1, 2, 3, 4, 5

Por lo tanto, Windows PowerShell asigna el valor 1 a la variable $a y el valor 2 a la variable $b. Se asignan los valores 3, 4 y 5 a la variable $c. Para asignar los valores de la variable $c a otras tres variables, utilice el siguiente formato:

        $d, $e, $f = $c

Este comando asigna el valor 3 a la variable $d, el valor 4 a la variable $e y el valor 5 a la variable $f.

También puede asignar un valor único a varias variables si las encadena. Por ejemplo, el siguiente comando asigna un valor de "three" a las cuatro variables:

        $a = $b = $c = $d = "three"

CMDLETS RELACIONADOS CON VARIABLES

Además de utilizar una operación de asignación para establecer el valor de una variable, también puede usar el cmdlet Set-Variable. Por ejemplo, el siguiente comando utiliza Set-Variable para asignar una matriz de 1, 2, 3 a la variable $a.

        Set-Variable -name a -value 1, 2, 3 

VEA TAMBIÉN

about_Arrays

about_Hash_Tables

about_Variables

Clear-Variable

Remove-Variable

Set-Variable