TEMA
    about_assignment_operators

DESCRIPCIÓN BREVE
    Describe cómo utilizar operadores para asignar valores a las 
    variables.


DESCRIPCIÓN DETALLADA
    Los operadores de asignación asignan uno o más valores a una variable. 
    Pueden realizar operaciones numéricas con los valores antes de la 
    asignación.


    Windows PowerShell admite los siguientes operadores de asignación.


    Operador  Descripción  
    -------   -----------
    =         Establece el valor de una variable en el valor especificado.

    +=        Aumenta el valor de una variable en el valor 
              especificado o anexa el valor especificado al valor existente.
 
    -=        Disminuye el valor de una variable en el valor especificado.
 
    *=        Multiplica el valor de una variable por el valor 
              especificado o anexa el valor especificado al valor existente.
 
    /=        Divide el valor de una variable por el valor especificado.
 
    %=        Divide el valor de una variable por el valor 
              especificado y, a continuación, asigna el resto (módulo) a la 
              variable.

    ++        Aumenta en 1 el valor de una variable, una propiedad 
              asignable o un elemento de matriz.

    --        Disminuye en 1 el valor de una variable, una propiedad 
              asignable o un elemento de matriz.

  

  SINTAXIS
    Esta es la sintaxis de los operadores de asignación:


        <expresión-asignable> <operador-de-asignación> <valor>


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


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


        <expresión-asignable><operador>
        <operador><expresión-asignable>


    La expresión asignable debe un número o debe ser convertible a un 
    número.


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


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


        $MyShell = "Windows PowerShell" 


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


        $a = 6
        $a = 12

 
    En Windows PowerShell, las variables no tienen un tipo de datos 
    específico a no ser que se conviertan. Cuando una variable 
    contiene un solo objeto, toma el tipo de datos de ese objeto. Cuando 
    contiene una colección de objetos, la variable tiene el tipo de datos 
    System.Object. Por consiguiente, se puede asignar cualquier tipo de 
    objeto a la colección. En el ejemplo siguiente se muestra que es 
    posible agregar objetos de proceso, objetos de servicio, cadenas y 
    enteros a una variable sin generar un error: 


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

    Dado que el operador de asignación (=) tiene una precedencia 
    menor que el operador de canalización (|), no es necesario usar 
    paréntesis para asignar el resultado de una canalización de 
    comandos a una variable. Por ejemplo, el comando siguiente ordena los 
    servicios en el equipo y, a continuación, asigna los servicios 
    ordenados la variable $a:


        $a = get-service | sort name


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


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


    En este ejemplo se asigna 0 a la variable $a si el valor de $b es 
    menor que 0. Se asigna a $a el valor de $b si el valor de $b no 
    es menor que cero. 

 

  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 generar ninguna advertencia.


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


        $a = 6 

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


        $a = "fútbol" 


    Para asignar una matriz (varios valores) a una variable, se 
    separan los valores con comas, como sigue:


        $a = "manzana", "naranja", "limón", "uva" 

    Para asignar una tabla hash a una variable, se utiliza la 
    notación de tabla hash estándar en Windows PowerShell. Se escribe 
    un símbolo de arroba (@) seguido por pares de clave/valor 
    separados por signos de punto y coma (;), todos ellos entre 
    llaves ({}). Por ejemplo, para asignar una tabla hash a la 
    variable $a, escriba:


        $a = @{uno=1; dos=2; tres=3} 


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


        $a = 0x10 


    Para asignar un valor exponencial a una variable, se escribe el 
    número raíz, luego la letra "e" y, a continuación, un número que 
    representa un múltiplo de 10. Por ejemplo, para asignar a la 
    variable $a el valor 3,1415 elevado a una potencia de 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 el valor 10 kilobytes a la variable $a, escriba:


        $a = 10kb


  ASIGNACIÓN MEDIANTE EL OPERADOR DE ADICIÓN (+=)
    La asignación mediante el operador de adición (+=) incrementa el 
    valor de una variable o bien anexa el valor especificado al valor 
    existente. La acción depende de si el tipo de la variable es 
    numérico o de cadena, y de si la variable contiene un solo valor 
    (un escalar) o varios (una colección).


    El operador += combina dos operaciones. En primer lugar, suma y, a 
    continuación, asigna. Por consiguiente, las instrucciones siguientes son 
    equivalentes:


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

 
    Cuando la variable contiene un solo valor numérico, el operador += 
    incrementa el valor existente en la cantidad especificada en el 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 de cadena, se anexa a la cadena 
    el valor que figura a la derecha del operador, como sigue: 


        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 a la matriz los valores que figuran en el lado derecho del 
    operador. A menos que se establezca explícitamente el tipo de la 
    matriz mediante una conversión, se puede anexar cualquier tipo de 
    valor a la matriz, como sigue:


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

 
    Cuando el valor de una variable es una tabla hash, el operador += 
    anexa a la tabla hash el valor que figura en el lado derecho del 
    operador. Sin embargo, dado que el único tipo que se puede 
    agregar a una tabla hash es otra tabla hash, todas las demás 
    asignaciones producen un error.


    Por ejemplo, el comando siguiente asigna una tabla hash la variable $a.
    A continuación, se utiliza el operador += para anexar otra tabla 
    hash a la tabla hash existente, de tal forma que, en realidad, se 
    agrega un nuevo par de clave/valor a la tabla hash existente. 
    Este comando se ejecuta correctamente, como se muestra en el resultado:


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


    El comando siguiente intenta anexar un entero (1) a la tabla hash 
    en la variable $a. Se produce un error en este comando:


        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += 1
        Solo se puede agregar una tabla de hash a otra tabla de hash.
        En línea:1 carácter:6
        + $a += <<<< 1


  ASIGNACIÓN MEDIANTE EL OPERADOR DE SUSTRACCIÓN (-=)
    El operador de asignación por sustracción (-=) disminuye el valor 
    de una variable en el valor especificado en el lado derecho del 
    operador.
    Este operador no se puede utilizar con variables de cadena ni 
    para quitar un elemento de una colección.


    El operador -= combina dos operaciones. En primer lugar, resta y, a 
    continuación, asigna. Por consiguiente, 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 se puede utilizar el operador -= de asignación para 
    disminuir el valor de un miembro de una matriz numérica. Para 
    ello, se debe especificar el índice del elemento de matriz que se 
    desea modificar. En el ejemplo siguiente, se reduce en 1 el valor 
    del tercer elemento de una matriz (elemento 2):


        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 valores de una 
    variable. Para eliminar todos los valores que están asignados a 
    una variable, se utilizan los cmdlets Clear-Item o Clear-Variable para 
    asignar el valor $null o "" a la variable.


        $a = $null 


    Para eliminar un valor determinado de una matriz, se utiliza la 
    notación de matriz para asignar el valor $null al elemento de que 
    se trate. Por ejemplo, la instrucción siguiente elimina el 
    segundo valor (posición de índice 1) 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 se utiliza el cmdlet Remove-Variable. 
    Este método resulta útil cuando la variable se ha convertido 
    explícitamente a un tipo de datos determinado y desea una 
    variable sin tipo. El comando siguiente elimina la variable $a:


        remove-variable a
 

  ASIGNACIÓN MEDIANTE EL OPERADOR DE MULTIPLICACIÓN (*=) La 
    asignación mediante el operador de multiplicación (*=) multiplica 
    un valor numérico o anexa a una variable el número especificado de 
    copias del valor de cadena. 


    Cuando una variable contiene un solo valor numérico, ese valor se 
    multiplica por el valor que figura en el 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, a continuación, asigna. Por consiguiente, las instrucciones 
    siguientes son equivalentes:


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

 
    Cuando una variable contiene un valor de cadena, Windows PowerShell anexa 
    al valor el número especificado de cadenas, como sigue:


        C:\PS> $a = "archivo"
        C:\PS> $a *= 4 
        C:\PS> $a
        archivoarchivoarchivoarchivo

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


        $a[0] *= 2
 

  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. Este operador no se puede usar con variables de cadena.


    El operador /= combina dos operaciones. Primero, divide y, a 
    continuación, asigna. Por consiguiente, 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, se debe utilizar un 
    índice para identificar el elemento que se desea modificar. Por 
    ejemplo, el comando siguiente divide el segundo elemento de la matriz 
    (posición de índice 1) por 2:


        $a[1] /= 2
 

  ASIGNACIÓN MEDIANTE EL OPERADOR DE MÓDULO (%=)
    El operador de asignación por módulo (%=) divide el valor de una 
    variable por el valor especificado en el lado derecho del operador. 
    A continuación, el operador %= asigna a la variable el resto 
    (denominado módulo). Este operador únicamente se puede utilizar cuando 
    la variable contiene un solo valor numérico. No se puede utilizar si la 
    variable contiene una variable de cadena o una matriz.


    El operador %= combina dos operaciones. En primer lugar, divide y 
    determina el resto y, a continuación, asigna el resto a la 
    variable. Por consiguiente, 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


  OPERADORES DE DECREMENTO E INCREMENTO

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


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


    Para forzar la devolución de un valor, debe incluirse la variable y el 
    operador entre paréntesis, como sigue:


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


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


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


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


        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. Al igual que sucede con el operador de incremento, no se 
    devuelve ningún valor cuando se utiliza el operador en una instrucción 
    simple. Para devolver un valor, se utilizan paréntesis, como sigue:


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


    La versión de prefijo del operador disminuye la variable antes de 
    que su valor se utilice en la instrucción, como sigue:


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


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


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


  TIPOS DE MICROSOFT .NET FRAMEWORK
    De forma predeterminada, cuando una variable tiene un solo valor, 
    el valor que se le asigna determina el tipo de datos de la 
    variable. Por ejemplo, el comando siguiente crea una variable 
    cuyo tipo es Integer (System.Int32):


        $a = 6 


    Para buscar el tipo de .NET Framework de una variable, se utiliza 
    el método GetType y su propiedad FullName, como sigue. Es importante 
    asegurarse de incluir los paréntesis después del nombre del método 
    GetType, aunque la llamada al método no tenga ningún argumento:


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


    Para crear una variable que contiene una cadena, se asigna un valor de 
    cadena a la variable. Para indicar que el valor es una cadena, se 
    pone entre comillas, como sigue:


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

 
    Si el primer valor asignado a la variable es una cadena, Windows 
    PowerShell tratará todas las operaciones como operaciones de cadena y 
    convertirá los nuevos valores en cadenas. Esto sucede en el ejemplo 
    siguiente:


        C:\PS> $a = "archivo"
        C:\PS> $a += 3
        C:\PS> $a
        archivo3

 
    Si el primer valor asignado es un entero, Windows PowerShell 
    tratará todas las operaciones como operaciones de enteros y 
    convertirá los nuevos valores en enteros. Esto sucede en el ejemplo 
    siguiente:


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

 
    El tipo de una variable escalar nueva se puede convertir en 
    cualquier tipo de datos de .NET Framework. Para ello, debe 
    escribirse el nombre del tipo de datos entre corchetes como 
    prefijo del nombre de la variable o del primer valor de asignación. 
    Al convertir una variable, es posible determinar los tipos de datos que 
    se pueden almacenar en ella. Además, se puede determinar cómo se 
    comportará la variable al manipularla.


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


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

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


        $a = [string]27

 
    Al convertir una variable a un tipo específico, la convención común es 
    convertir la variable propiamente dicha, y no su valor. Sin embargo, 
    no puede 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, es preciso reemplazar su valor, como sigue:


        C:\PS> $a = "cadena"
        C:\PS> [int]$a
        No se puede convertir el valor "cadena" al tipo "System.Int32". 
        Error: "La cadena de entrada no tiene el formato correcto."
        En línea:1 carácter:8
        + [int]$a <<<<

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

    Además, si se usa un tipo de datos como prefijo de un nombre de 
    variable, el tipo de esa variable se bloquea, a menos que lo invalide 
    explícitamente especificando otro tipo de datos. Si se intenta 
    asignar un valor que no es compatible con el tipo existente y no invalida 
    explícitamente el tipo, Windows PowerShell muestra un error, como se 
    muestra en el ejemplo siguiente:


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

        C:\PS> [int]$a = 3
        C:\PS> $a = "cadena"
        No se puede convertir el valor "cadena" al tipo 
        "System.Int32". Error: "La cadena de entrada no tiene el formato 
        correcto."
        En línea:1 carácter:3
        + $a <<<< = "cadena"

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

    En Windows PowerShell, los tipos de datos de las variables que 
    contienen varios elementos en una matriz se administran de manera 
    diferente que los tipos de datos de las variables que contienen 
    un único elemento. A menos que se asigne un tipo de datos 
    específicamente a una variable de matriz, el tipo de datos es siempre 
    System.Object []. Este tipo de datos es específico de las matrices.


    En ocasiones, se puede invalidar el tipo predeterminado 
    especificando otro. Por ejemplo, el comando siguiente convierte 
    la variable a un tipo de matriz string []:



        [string []] $a = "uno", "dos", "tres"
 

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


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

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


        Martes, 31 de marzo de 2005 12:00:00 a.m.


  ASIGNAR MÚLTIPLES VARIABLES
    En Windows PowerShell se pueden asignar valores a múltiples 
    variables con un solo comando. El primer elemento del valor de 
    asignación se asigna a la primera variable, el segundo elemento 
    se asigna a la segunda variable, el tercer elemento a la tercera 
    variable, etc. Por ejemplo, el comando siguiente asigna el valor 
    1 a la variable $a, el segundo, el valor 2 a la variable $b y, el 
    tercero, 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 que sobren se asignarán a la última variable. 
    Por ejemplo, el siguiente comando contiene tres variables y cinco 
    valores:


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

 
    Por consiguiente, Windows PowerShell asignará el valor 1 a la 
    variable $a y el valor 2 a la variable $b. Además, asignará los 
    valores 3, 4 y 5 a la variable $c. Para asignar los valores de la 
    variable $c a otras tres variables, se utiliza el formato siguiente:


        $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 individual a múltiples variables 
    encadenándolas. Por ejemplo, el siguiente comando asigna el valor "tres" a 
    cuatro variables:


        $a = $b = $c = $d = "tres"

    
  CMDLETS RELACIONADOS CON VARIABLES
    Además de usar una operación de asignación para establecer el 
    valor de una variable, también se puede usar el cmdlet Set-Variable. 
    Por ejemplo, el comando siguiente usa Set-Variable para 
    asignar la matriz 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




Tabla de contenido