about_Assignment_Operators

Descripción breve

Describe cómo usar operadores para asignar valores a variables.

Descripción larga

Los operadores de asignación asignan uno o varios valores a una variable. El signo igual (=) es el operador de asignación de PowerShell. PowerShell también tiene los siguientes operadores de asignación compuesta: +=, -=, *=%=, ++, , , --. ??= Los operadores de asignación compuesta realizan operaciones en los valores anteriores a la asignación.

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, expresión o instrucción.

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

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

El valor de la expresión asignable debe ser un número o debe convertirse en un número.

Uso del operador de asignación

Las variables se denominan espacios de memoria 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 nuevo valor al valor existente. Por ejemplo, la siguiente instrucción asigna el valor de PowerShell a la $MyShell variable :

$MyShell = "PowerShell"

Al asignar un valor a una variable en PowerShell, la variable se crea si aún no existe. Por ejemplo, la primera de las dos instrucciones de asignación siguientes crea la $a variable y asigna un valor de 6 a $a. 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 PowerShell no tienen un tipo de datos específico a menos que los convierta. Cuando una variable contiene solo un 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 e enteros a una variable sin generar un error:

$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12

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

$a = Get-Service | Sort-Object -Property 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 }

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

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, use la notación de tabla hash estándar en PowerShell. Escriba un signo @ seguido de pares clave-valor separados por punto y coma y entre llaves ;{ }. Por ejemplo, para asignar una tabla hash a la $a variable, escriba:

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

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

$a = 0x10

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

$a = 3.1415e3

PowerShell también puede convertir kilobytesKB, megabytes y gigabytes MBGB en bytes. Por ejemplo, para asignar un valor de 10 kilobytes a la $a variable , escriba:

$a = 10kb

Uso de operadores de asignación compuesta

Los operadores de asignación compuesta realizan operaciones numéricas en los valores anteriores a la asignación.

Importante

Los operadores de asignación compuesta no usan el ámbito dinámico. La variable siempre está en el ámbito actual.

En el ejemplo siguiente, la variable $x se define en el ámbito global. Las llaves crean un nuevo ámbito. La variable $x dentro de las llaves es una nueva instancia y no una copia de la variable global.

$x = 1 # Global scope
& { $x += 1; $x }
1

Cuando se usa el operador de asignación normal, se obtiene una copia de la variable del ámbito primario. Pero tenga en cuenta que $x en el ámbito primario no se cambia.

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

Asignación por operador de suma

El operador += assignment by addition 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 si la variable contiene un valor único (un escalar) o varios valores (una colección).

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

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

Cuando la variable contiene un valor numérico único, el += operador incrementa el valor existente por la cantidad 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 usar el += operador para aumentar el valor de una variable:

$a = 4
$a += 2
$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:

$a = "Windows"
$a += " PowerShell"
$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. A menos que la matriz se escriba explícitamente mediante la conversión, puede anexar cualquier tipo de valor a la matriz, como se indica a continuación:

$a = 1,2,3
$a += 2
$a
1
2
3
2

y

$a += "String"
$a
1
2
3
2
String

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

Por ejemplo, el siguiente comando asigna una tabla hash a la $a variable . A continuación, usa el += operador para anexar otra tabla hash a la tabla hash existente, agregando eficazmente un nuevo par clave-valor a la tabla hash existente. Este comando se realiza correctamente, como se muestra en la salida:

$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name                           Value
----                           -----
a                              1
b                              2
mode                           write
c                              3

El comando siguiente intenta anexar un entero "1" a la tabla hash de la $a variable . Este comando produce un error:

$a = @{a = 1; b = 2; c = 3}
$a += 1
InvalidOperation:
Line |
   2 |  $a += 1
     |  ~~~~~~~
     | A hash table can only be added to another hash table.

Asignación por operador de resta

La asignación por operador -= de resta disminuye el valor de una variable por el valor especificado en el lado derecho del operador. Este operador no se puede usar con variables de cadena y no se puede usar para quitar un elemento de una colección.

El -= operador combina dos operaciones. En primer lugar, resta y, a continuación, asigna. Por lo tanto, las siguientes instrucciones son equivalentes:

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

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

$a = 8
$a -= 2
$a
6

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

$a = 1,2,3
$a[2] -= 1
$a
1
2
2

No se puede usar 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 de $null o "" a la variable.

$a = $null

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

$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3

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

Remove-Variable -Name a

Asignación por operador de multiplicación

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

Cuando 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 usar el *= operador para multiplicar el valor de una variable:

$a = 3
$a *= 4
$a
12

En este caso, el *= operador combina dos operaciones. En primer lugar, multiplica y, a continuación, asigna. Por lo tanto, las siguientes instrucciones son equivalentes:

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

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

$a = "file"
$a *= 4
$a
filefilefilefile

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

$a[0] *= 2

Asignación por operador de división

La asignación por operador /= de división divide un valor numérico por el valor especificado en el lado derecho del operador. El operador no se puede usar con variables de cadena.

El /= operador combina dos operaciones. En primer lugar, divide y, a continuación, asigna. Por lo tanto, las dos instrucciones siguientes son equivalentes:

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

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

$a = 8
$a /=2
$a
4

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

$a[1] /= 2

Asignación por operador de módulo

La asignación por operador %= de módulo divide el valor de una variable por el valor del lado derecho del operador. A continuación, el %= operador asigna el resto (conocido como módulo) a la variable . Puede usar este operador solo cuando una variable contiene un único valor numérico. No se puede usar este operador cuando una 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 lo tanto, las siguientes instrucciones son equivalentes:

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

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

$a = 7
$a %= 4
$a
3

Operadores de incremento y decremento

El operador ++ de incremento aumenta el valor de una variable en 1. Cuando se usa el operador de incremento 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:

$a = 7
++$a
$a
8

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

$a = 7
(++$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 una variable antes de que se use su valor en la instrucción , como se indica a continuación:

$a = 7
$c = ++$a
$a
8
$c
8

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

$a = 7
$c = $a++
$a
8
$c
7

El operador -- decremento reduce el valor de una variable en 1. Al igual que con el operador de incremento, no se devuelve ningún valor cuando se usa el operador en una instrucción simple. Use paréntesis para devolver un valor, como se indica a continuación:

$a = 7
--$a
$a
6
(--$a)
5

La versión de prefijo del operador disminuye una variable antes de usar su valor en la instrucción , como se indica a continuación:

$a = 7
$c = --$a
$a
6
$c
6

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

$a = 7
$d = $a--
$a
6
$d
7

Operador de asignación de fusión null

El operador de asignación de coalescencia NULL ??= asigna el valor del operando de la derecha a su operando de la izquierda solo si este último se evalúa como NULL. El operador ??= no evalúa su operando de la derecha si el operando de la izquierda se evalúa como no NULL.

$x = $null
$x ??= 100
$x
100

Para obtener más información, vea Operador de fusión null.

Tipos de Microsoft .NET

De forma predeterminada, cuando una variable solo tiene un valor, el valor asignado a la variable determina el tipo de datos de la variable. Por ejemplo, el siguiente comando crea una variable que tiene el tipo System.Int32 :

$a = 6

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

$a = 6
$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, escríbalo entre comillas, como se indica a continuación:

$a = "6"
$a.GetType().FullName
System.String

Si el primer valor asignado a la variable es una cadena, PowerShell trata todas las operaciones como operaciones de cadena y convierte valores nuevos en cadenas. Esto ocurre en el ejemplo siguiente:

$a = "file"
$a += 3
$a
file3

Si el primer valor es un entero, PowerShell trata todas las operaciones como operaciones enteras y convierte nuevos valores en enteros. Esto ocurre en el ejemplo siguiente:

$a = 6
$a += "3"
$a
9

Puede convertir una nueva variable escalar como cualquier tipo de .NET colocando el nombre de tipo entre corchetes que preceden al nombre de variable o al primer valor de asignación. Al convertir una variable, va a definir el tipo de datos que se pueden almacenar en la variable.

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

[string]$a = 27
$a += 3
$a
273

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

$a = [string]27

No se puede volver a retransmitir el tipo de datos de una variable existente si su valor no se puede convertir al nuevo tipo de datos.

$a = "string"
[int]$a
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."

Para cambiar el tipo de datos, debe reemplazar su valor, como se indica a continuación:

[int]$a = 3

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

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
   2 |  $a = "string"
     |  ~~~~~~~~~~~~~
     | Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[string]$a = "string"

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

A veces, puede invalidar el tipo predeterminado especificando otro tipo. Por ejemplo, el siguiente comando convierte la variable como un string [] tipo de matriz:

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

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

[System.DateTime]$a = "5/31/2005"

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

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

Asignación de varias variables

En PowerShell, puede asignar valores a varias variables mediante 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. Esto se conoce como asignación múltiple.

Por ejemplo, el siguiente comando asigna el valor 1 a la $a variable, el valor 2 a la $b variable y el valor 3 a la $c variable:

$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 siguiente comando contiene tres variables y cinco valores:

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

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

$d, $e, $f = $c

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

Si el valor de asignación contiene menos elementos que variables, a las variables restantes se les asigna el valor $null. Por ejemplo, el siguiente comando contiene tres variables y dos valores:

$a, $b, $c = 1, 2

Por lo tanto, PowerShell asigna el valor 1 a la $a variable y el valor 2 a la $b variable. La $c variable es $null.

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

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

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

Set-Variable -Name a -Value 1, 2, 3

Consulte también