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