Vous êtes sur la page 1sur 9

TEMA

about_Arithmetic_Aperators
DESCRIPCIN BREVE
Describe los operadores que realizan operaciones aritmticas en
Windows PowerShell.
DESCRIPCIN DETALLADA
Los operadores aritmticos calculan valores numricos. Puede
utilizar uno o ms operadores aritmticos para sumar, restar,
multiplicar y dividir valores, as como para calcular el resto
(mdulo) de una operacin de divisin.
Adems, el operador de adicin (+) y el operador de
multiplicacin (*) tambin funcionan con cadenas, matrices y
tablas hash. El operador de adicin concatena la entrada. El
operador de multiplicacin devuelve varias copias de la entrada.
Incluso se pueden mezclar tipos de objetos en una instruccin
aritmtica.
El tipo del objeto del extremo izquierdo de la expresin
determina el mtodo que se utiliza para evaluar la instruccin.
Windows PowerShell admite los siguientes operadores aritmticos:
Operador Descripcin
-------- ----------+
Suma nmeros enteros; concatena
cadenas, matrices y tablas hash.

Ejemplo
------6+2
"archivo" + "nombre"

Resta un valor de otro.

6-2
(get-date).date - 1

Convierte un nmero en negativo.

-6+2
-4

Multiplica nmeros enteros; copia


las cadenas y las matrices el nmero
de veces especificado.

6*2
"w" * 3

Divide dos valores.

6/2

Devuelve el resto de una operacin


de divisin.

7%2

PRIORIDAD DE OPERADORES
Windows PowerShell procesa los operadores aritmticos en el orden
siguiente:
Parntesis ()
- (para un nmero negativo)
*, /, %
+, - (para la resta)
Windows PowerShell procesa las expresiones de izquierda a

derecha, segn las reglas de precedencia. En los ejemplos


siguientes se muestra el efecto de las reglas de precedencia:
C:\PS> 3+6/3*4
11
C:\PS> 10+4/2
12
C:\PS> (10+4)/2
7
C:\PS> (3+3)/ (1+1)
3
El orden en el que Windows PowerShell evala las expresiones
podra variar con respecto al de otros lenguajes de programacin
y creacin de script utilizados. En el ejemplo siguiente se
muestra una instruccin de asignacin complicada.
C:\PS> $a = 0
C:\PS> $b = 1,2
C:\PS> $c = -1,-2
C:\PS> $b[$a] = $c[$a++]
C:\PS> $b
1
-1
En este ejemplo, la expresin $a++ se evala antes que $c[$a++].
Al evaluar $a++, cambia el valor de $a. La variable $a de $b[$a]
es igual a 1, no a 0, de modo que la instruccin asigna un valor
a $b[1], no a $b[0].

SUMAR Y MULTIPLICAR TIPOS NO NUMRICOS


Es posible sumar nmeros, cadenas, matrices y tablas hash.
Adems, se pueden multiplicar nmeros, cadenas y matrices. Sin
embargo, no se pueden multiplicar las tablas hash.
Al sumar cadenas, matrices o tablas hash, se concatenan los
elementos. Al concatenar colecciones, como matrices o tablas
hash, se crea un nuevo objeto que contiene los objetos de ambas
colecciones. Si se intentan concatenar tablas hash que tienen la
misma clave, se produce un error en la operacin.
Por ejemplo, los comandos siguientes crean dos matrices y, a
continuacin, las suman:
C:\PS> $a = 1,2,3
C:\PS> $b = "A","B,"C"
C:\PS> $a + $b
1
2
3
A
B

C
Tambin es posible realizar operaciones aritmticas con objetos
de tipos diferentes. El tipo de Microsoft .NET Framework del
objeto del extremo izquierdo de la operacin determina la
operacin que Windows PowerShell realiza.Windows PowerShell
intenta convertir todos los objetos de la operacin al tipo de
.NET Framework del primer objeto. Si consigue convertir los objetos
correctamente, realiza la operacin adecuada para el tipo de .NET
Framework del primer objeto. Si no convierte cualquiera de los objetos,
se produce un error en la operacin.
En el ejemplo siguiente se demuestra el uso de los operadores de
adicin y multiplicacin en operaciones que incluyen tipos de objetos
diferentes:
C:\PS> "archivo" + 16
archivo16
C:\PS> $array = 1,2,3
C:\PS> $array + 16
1
2
3
16
C:\PS> $array + "archivo"
1
2
3
archivo
C:\PS> "archivo" * 3
archivoarchivoarchivo
Dado que el objeto del extremo izquierdo determina qu mtodo se
usa para evaluar las instrucciones, en Windows PowerShell las
operaciones de suma y multiplicacin no son estrictamente
conmutativas. Por ejemplo, (a + b) no siempre es igual a (b + a),
y (a * b) no siempre es igual a (b * a).
En el siguiente ejemplo se muestra este principio:
C:\PS> "archivo" + 2
archivo2
C:\PS> 2 + "archivo"
No se puede convertir el valor "archivo" a tipo
"System.Int32". Error: "La cadena de entrada no tiene el
formato correcto."
En lnea:1 carcter:4
+ 2 + <<<< "archivo"
C:\PS> "archivo" * 3
archivoarchivoarchivo
C:\PS> 3 * "archivo"
No se puede convertir el valor "archivo" a tipo

"System.Int32". Error: "La cadena de entrada no tiene el


formato correcto."
En lnea:1 carcter:4
+ 3 * <<<< "archivo"
Las tablas hash son un caso ligeramente diferente. Las tablas
hash se pueden sumar. Tambin es posible sumar una tabla hash a
una matriz. Sin embargo, no se puede sumar ningn otro tipo a una
tabla hash.
En los ejemplos siguientes se muestra cmo sumar tablas hash
entre s y cmo sumarlas a otros objetos:
C:\PS> $hash1 = @{a=1; b=2; c=3}
C:\PS> $hash2 = @{c1="Server01"; c2="Server02"}
C:\PS> $hash1 + $hash2
Nombre
---c2
a
b
c1
c

Valor
----Server02 1
1
2
Server01 3
3

C:\PS> $hash1 + 2
Solo se puede agregar una tabla de hash a otra tabla de hash.
En lnea:1 carcter:9
+ $hash1 + <<<< 2
C:\PS> 2 + $hash1
No se puede convertir "System.Collections.Hashtable" a "System.Int32".
En lnea:1 carcter:4
+ 2 + <<<< $hash1
En los ejemplos siguientes se muestra que se puede sumar una
tabla hash a una matriz. La tabla hash completa se suma a la
matriz como un nico objeto.
C:\PS> $array = 1,2,3
C:\PS> $array + $hash1
1
2
3
Nombre
---a
b
c
C:\PS> $sum = $array + $hash1
C:\PS> $sum.count

Valor
----1
2
3

4
C:\PS> $sum[3]
Nombre
---a
b
c

Valor
----1
2
3

PS C:\ps-test> $sum + $hash2


1
2
3
Nombre
---a
b
c
c2

Valor
----1
2
3
Server02

En el ejemplo siguiente se muestra que no se pueden sumar tablas


hash que contienen la misma clave:
C:\PS> $hash1 = @{a=1; b=2; c=3}
C:\PS> $hash2 = @{c="red"}
C:\PS> $hash1 + $hash2
Argumento incorrecto para el operador '+': Ya se ha agregado
el elemento. Clave en el diccionario: 'c' Clave agregada: 'c.'
En lnea:1 carcter:9
+ $hash1 + <<<< $hash2

Aunque los operadores de adicin son muy tiles, deben utilizarse los
operadores de asignacin para agregar elementos a las tablas hash y a
las matrices. Para obtener ms informacin, vea about_assignment_opera
tors. En los ejemplos siguientes se utiliza el operador de asignacin
+= para agregar elementos a una matriz:
C:\PS> $array
1
2
3
C:\PS> $array + "archivo"
1
2
3
archivo
C:\PS> $array
1
2
3
C:\PS> $array += "archivo"
C:\PS> $array

1
2
3
archivo
C:\PS> $hash1
Nombre
---a
b
c

Valor
----1
2
3

C:\PS> $hash1 += @{e = 5}


C:\PS> $hash1
Nombre
---a
b
e
c

Valor
----1
2
5
3

Windows PowerShell selecciona automticamente el tipo numrico de .NET


Framework que mejor expresa el resultado sin perder precisin. Por ejemplo:
C:\PS> 2 + 3,1
5,1
C:\PS> (2). GetType().FullName
System.Int32
C:\PS> (2 + 3.1).GetType().FullName
System.Double
Si el resultado de una operacin es demasiado grande para el
tipo, el tipo del resultado se ampla para alojar el resultado,
como en el ejemplo siguiente:
C:\PS> (512MB).GetType().FullName
System.Int32
C:\PS> (512MB * 512MB).GetType().FullName
System.Double
El tipo del resultado no ser necesariamente igual que el de uno
de los operandos. En el ejemplo siguiente, el valor negativo no
se puede convertir a un entero sin signo y el entero sin signo es
demasiado grande para convertirse a Int32:
C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname
System.Int64
En este ejemplo, Int64 admite ambos tipos.
El tipo System.Decimal es una excepcin. Si cualquier operando
tiene el tipo Decimal, el resultado ser del tipo Decimal. Si el
resultado es demasiado grande para el tipo Decimal, no se
convertir a Double, sino que se producir un error.
C:\PS> [Decimal]::maxvalue
79228162514264337593543950335

C:\PS> [Decimal]::maxvalue + 1
Valor demasiado grande o demasiado pequeo para Decimal.
En lnea:1 carcter:22
+ [Decimal]::maxvalue + <<<< 1
OPERADORES ARITMTICOS Y VARIABLES
Los operadores aritmticos tambin se pueden utilizar con
variables. Los operadores se aplican a los valores de las
variables. En los ejemplos siguientes se muestra cmo se usan los
operadores aritmticos con variables:
C:\PS> $intA = 6
C:\PS> $intB = 4
C:\PS> $intA + $intB
10
C:\PS>
C:\PS>
C:\PS>
C:\PS>

$a
$b
$c
$a

=
=
=
+

"Windows "
"PowerShell "
2
$b + $c

Windows PowerShell 2
OPERADORES ARITMTICOS Y COMANDOS
Normalmente, los operadores aritmticos se utilizan en
expresiones con nmeros, cadenas y matrices. Sin embargo, tambin
se pueden utilizar con los objetos que los comandos devuelven y
con las propiedades de esos objetos.
En los ejemplos siguientes se muestra cmo utilizar los
operadores aritmticos en expresiones con comandos de Windows
PowerShell:
C:\PS> get-date
Mircoles, 2 de enero de 2008 1:28:42 p.m.
C:\PS> $day = new-timespan -day 1
C:\PS> get-date + $day
Jueves, 3 de enero de 2008 1:28:42 p.m.
C:\PS> get-process | where {($_.ws * 2) -gt 50mb}
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s)
Id ProcessName
------- ------ ----- ----- ----- ------- ----------1896
39
50968 30620 264 1,572.55 1104 explorer
12802
78
188468 81032 753 3,676.39 5676 OUTLOOK
600
9
36168 26956 143
12.20 988 powershell
561
14
6592 28144 110 1,010.09 496 services
3476
80
34664 26092 234 ...45.69 876 svchost
967
30
58804 59496 416
930.97 2508 WINWORD
EJEMPLOS
En los ejemplos siguientes se muestra cmo utilizar los

operadores aritmticos en Windows PowerShell:


C:\PS> 1 + 1
2
C:\PS> 1 - 1
0
C:\PS> -(6 + 3)
-9
C:\PS> 6 * 2
12
C:\PS> 7 / 2
3,5
C:\PS> 7 % 2
1
C:\PS> w * 3
www
C:\PS> 3 * "w"
No se puede convertir el valor "w" a tipo "System.Int32". Error:
"La cadena de entrada no tiene el formato correcto."
En lnea:1 carcter:4
+ 3 * <<<< "w"
PS C:\ps-test> "Windows" + " " + "PowerShell"
Windows PowerShell
PS C:\ps-test> $a = "Windows" + " " + "PowerShell"
PS C:\ps-test> $a
Windows PowerShell
C:\PS> $a[0]
W
C:\PS> $a = "archivosPrueba.txt"
C:\PS> $b = "C:\Logs\"
C:\PS> $b + $a
C:\Logs\archivosPrueba.txt
C:\PS> $a = 1,2,3
C:\PS> $a + 4
1
2
3
4
C:\PS> $servers = @{0 = "LocalHost"; 1 = "Server01"; 2 = "Server02"}
C:\PS> $servers + @{3 = "Server03"}
Nombre Valor
---- ----3 Server03
2 Server02
1 Server01
0 LocalHost

C:\PS> $servers
Nombre Valor
---- ----2 Server02
1 Server01
0 LocalHost
C:\PS> $servers += @{3 = "Server03"} #Usar operador de asignacin
C:\PS> $servers
Nombre Valor
---- ----3 Server03
2 Server02
1 Server01
0 LocalHost
VEA TAMBIN
about_arrays
about_assignment_operators
about_comparison_operators
about_hash_tables
about_operators
about_variables
Get-Date
New-TimeSpan