Está en la página 1de 13

14/11/21 09:18 Variables en PowerShell - Atareao

VARIABLES EN POWERSHELL
Actualizado el 2 de octubre de 2021 por atareao 25.2K deja el tuyo

Este es uno de los capítulos del tutorial PowerShell. Encontrarás los enlaces a todos los de

capítulos, al final de este artículo.

Si vas a utilizar PowerShell como una shell puede ser que no necesites variables,
aunque me extrañaría. Sin embargo, si vas a realizar scripts, va a ser muy difícil
que consigas escapar de ellas. Tarde o temprano necesitarás hacer uso de
variables para poder sacar el máximo partido a tus scripts. No siempre es posible
encadenar comandos, por distintas razones, como por ejemplo, porque sea
necesario realizar un tratamiento previo de la información que sacas en un paso
anterior.

Sea como fuere, en este capítulo sobre PowerShell, el objetivo es tratar con las
variables, ver como se definen y conocer como se trabaja con ellas.

https://atareao.es/tutorial/powershell/variables-en-powershell/ 1/13
14/11/21 09:18 Variables en PowerShell - Atareao

VARIABLES EN POWERSHELL

¿QUE ES UNA VARIABLE Y COMO SE UTILIZAN EN


POWERSHELL?

Una variable, no es ni mas ni menos, que un espacio en memoria donde


guardar información. Un espacio con un nombre. Dado que es necesario tener
identificado a ese espacio para poder guardar o sacar esa información.

En el caso de PowerShell la forma de identificar esos espacios en memoria es


mediante una cadena de texto precedida por $ . Por ejemplo, $variable .

Respecto a los nombres que les puedes asignar a las variables algunas
observaciones,

no distinguen entre mayúsculas y minúsculas. Es decir que $VARiable es


exactamente la misma que $variable .

La cadena de texto que define el nombre de la variable puede contener


algunos categorías de caracteres unicode, el carácter _ y el carácter ? .

Lo mas recomendable a la hora de crear tus propios nombres de variables es


que utilices exclusivamente carácteres alfanuméricos y el carácter _ . La razón
para esto es que el uso de otros carácteres te puede complicar el uso de estas
variables.

Para utilizar variables que incluyan espacios o caracteres especiales tienes


que encerrar el nombre de la variable entre {} . Por ejemplo,

PS /home/lorenzo> ${esta variable con


espacios}=contenido

PS /home/lorenzo> Write-Output ${esta variable con


espacios}

contenido

VARIABLES ESPECIALES

https://atareao.es/tutorial/powershell/variables-en-powershell/ 2/13
14/11/21 09:18 Variables en PowerShell - Atareao

Existen algunas variables especiales o automáticas o definidas por defecto.


Variables que guardan información de estado. En general, estas variables se
consideran de solo lectura, aunque es posible escribir en ellas, pero, no es
recomendable hacerlo, por cuestiones de compatibilidad con versiones anteriores.

Algunas de estas variables son las siguientes,

$$ contiene el último token en la última línea recibida por la sesión. En el


siguiente ejemplo la última línea recibida por la sesión es
Write-Output 1 2. Por ejemplo,

PS > Write-Output 1 2

PS > Write-Output $$

$^ contiene el primer token en la última línea recibida por la sesión. Es


decir, básicamente, justo lo contrario a la anterior solución. Por ejemplo.

PS > Write-Output 1 2

PS > Write-Output $^

Write-Output

$? esta variable contiene el estado de la ejecución del último comando. Si


el resultado de la ejecución del último comando ha sido satisfactorio contendrá
True y en otro caso contendrá False . Por ejemplo, si a las bravas escribes
un error, verás que el resultado de la ejecución es False ,

https://atareao.es/tutorial/powershell/variables-en-powershell/ 3/13
14/11/21 09:18 Variables en PowerShell - Atareao

PS > Write-Error "Mal"

Write-Error: Mal

PS > Write-Output $?

False

$args esta variable contiene un vector de valores de los parámetros que se


pasan a una función o a un script.

$Error contiene un vector, array, de los últimos errores ordenados de mas


reciente a menos, de forma que el error mas reciente es $Error[0] .

$HOME contiene la ruta absoluta al directorio de inicio del usuario.

$IsLinux , $IsWindows y $IsMacOS devuelven True si se


corresponden con el sistema operativo, en otro caso devolverán False .

$true , $false , $null conienen respectivamente True ,


False y Null .

Estas son solo algunas de las variables definidas por defecto por PowerShell,
puedes encontrar mas en variables automáticas de PowerShell

TRABAJANDO CON VARIABLES EN POWERSHELL

Para definir una variable es tan sencillo como hacer lo siguiente,

$variable = 1

De la misma manera puedes crear una variable que contenga una cadena de
texto,

$variable = "Hola mundo"

https://atareao.es/tutorial/powershell/variables-en-powershell/ 4/13
14/11/21 09:18 Variables en PowerShell - Atareao

O incluso que contenga un vector de enteros.

$variable = 1, 2, 3

De la misma manera puedes guardar el resultado de la ejecución de un cmdlet en


una variable para utilizarlo posteriormente. Esto es especialmente cómodo
cuando el resultado es un objeto y quieres utilizar alguno de los métodos del
objeto. Por ejemplo, puedes guardar todos los procesos que están corriendo en tu
sistema utilizando la siguiente instrucción,

$procesos = Get-Process

Si quieres obtener el primero de los procesos, dado que se trata de un vector de


procesos, tan solo tienes que ejecutar Write-Output $procesos[0] .
Recuerda que siempre puedes utilizar el alias echo , como en
echo $procesos[0] .

Así, por ejemplo si quisieras saber cuando comenzó ese proceso, tan solo tienes
que ejecutar,

echo $procesos[0].StartTime

Recuerda que para ver todos los métodos y propiedades que aplican a un
determinado objeto siempre puedes utilizar
echo $procesos[0] | Get-Member .

Pongamos que ahora quieres seleccionar uno de los procesos. Por ejemplo,
cupsd . Esto lo puedes hacer, tal y como viste en el capítulo anterior,
utilizando,

echo $procesos | Where-Object -Property ProcessName


-eq cupsd
https://atareao.es/tutorial/powershell/variables-en-powershell/ 5/13
14/11/21 09:18 Variables en PowerShell - Atareao

Es mas, ahora puedes asignar este proceso a una variable, por ejemplo, y por ser
algo original a $cupsd . ¿Como?

$cupsd = (echo $procesos | Where-Object -Property


ProcessName -eq cupsd)

Y ahora, de nuevo, como has hecho anteriormente, puedes obtener el momento


en el que se inició este proceso con $cupsd.StartTime . Recuerda, que
aunque yo esté respetando mayúsculas y minúsculas, es totalmente equivalente
$cupsd.StartTime a $cupsd.starttime .

OPERACIONES CON VARIABLES EN POWERSHELL

Una vez asignado un valor a una variable. Es posible eliminar su contenido. Para
ello tienes dos opciones. O bien utilizando el cmdlet Clear-Variable como
en el ejemplo siguiente,

Clear-Variable -Name cupsd

O bien directamente asignado $null a la variable como en este otro ejemplo,

$cupsd = $null

Para eliminar la variable tienes que utilizar el comando Remove-Variable


como en el ejemplo,

Remove-Variable -Name cupsd

https://atareao.es/tutorial/powershell/variables-en-powershell/ 6/13
14/11/21 09:18 Variables en PowerShell - Atareao

Ahora es posible que te estés preguntando que diferencia hay entre eliminar el
contenido y eliminar la variable. La cuestión es que aunque elimines el contenido
de una variable esta sigue existiendo. ¿Como puedes saber si una variable
existe?. Para ello, tienes que utilizar el cmdlet Get-Variable . Por ejemplo,

Get-Variable -Name cupsd

En el caso de que la variable exista, te devolverá su valor o, si has eliminado el


contenido, te devolverá vacío, pero algo te devuelve. Por el contrario. Si, has
eliminado la variable, tendrás algo como lo que te muestro en el siguiente
ejemplo,

PS > Get-Variable -Name cupsd

Get-Variable: Cannot find a variable with the name


'cupsd'.

TIPOS DE VARIABLES

PowerShell no es tipado, por defecto. Esto quiere decir que puedes guardar
cualquier tipo de dato en cualquier variable. Si quieres saber que tipo de dato
contiene una variable, puedes utilizar el método GetType . Recuerda, de
nuevo, que para conocer propiedades y métodos tienes que utilizar
GetMember … Para que veas algunos ejemplos,

PS > $variable = 3.1415; $variable.GetType().Name

Double

PS > $variable = 3.1415, "atareao.es";


$variable.GetType().Name

Object[]

PS > $variable = "atareao.es";


$variable.GetType().Name

String

https://atareao.es/tutorial/powershell/variables-en-powershell/ 7/13
14/11/21 09:18 Variables en PowerShell - Atareao

Sin embargo, a pesar de que, por defecto, PowerShell no sea tipado, puedes
definir el tipo de las variables. Para ello, tienes que preceder al nombre de la
variable del tipo que le quieres asignar entre corchetes. Por ejemplo,

[double]$variable = 3.1415;

Eso si, la variable $variable no debe estar definida definida, o debe estar a
$null , o de lo contrario dará un error similar al que te muestro en el siguiente
ejemplo,

PS > [double]$variable

InvalidArgument: Cannot convert value "atareao.es"


to type "System.Double". Error: "Input string was
not in a correct format."

Por otro lado, si a una variable que hayas definido de un tipo, le asignas un valor
de otro tipo lo intentará convertir, y en caso de que no lo consiga arrojará un error.
Por ejemplo, si defines una variable del tipo string y le asignas un int ,
convertirá el int a string , conforme te muestro en el siguiente ejemplo,

PS> [string]$variable = 12

PS> echo $variable.GetType().Name

String

EL INFIERNO DE LAS COMILLAS

El comportamiento de las comillas en PowerShell es similar al que te encontrar en


otras intérpretes de comandos como puede ser por ejemplo Bash, del cual te
recuerdo tienes un excelente tutorial sobre Scripts en Bash. Así, si utilizas dobles
comillas, la variable se reemplazará por su contenido, mientras que si utilizas
simples, se utilizará el nombre de la variable. Por ejemplo.

PS> $variable = 3.141592

PS> Write-Output "La variable contiene $variable"

La variable contiene 3.141592

https://atareao.es/tutorial/powershell/variables-en-powershell/ 8/13
14/11/21 09:18 Variables en PowerShell - Atareao

PS> Write-Output 'La variable contiene $variable'

La variable contiene $variable

Pero todavía tienes una opción también interesante que te muestro en el


siguiente ejemplo,

PS> $variable = 3.141592

PS> Write-Output "La variable `$variable contiene


$variable"

La variable $variable contiene 3.141592

Al preceder la variable con «« se muestra el nombre de la variable en lugar de su


contenido.

SOBRE EL ÁMBITO DE ACTUACIÓN

Las variables en PowerShell tienen un vida que se circunscribe al ámbito en el


que fueron creadas. Como veremos en un capítulo posterior, cuando definas una
variable dentro de una función, esta variable, solo estará disponible dentro de esa
función. Y lo mismo sucede para el caso de variables que definas en scripts. Sin
embargo es posible definir variables con un ámbito global. Para ello, tienes que
preceder el nombre la variable de la palabra Global. Por ejemplo,

PS > $Global:variable=1

PS > echo $variable

https://atareao.es/tutorial/powershell/variables-en-powershell/ 9/13
14/11/21 09:18 Variables en PowerShell - Atareao

CONCLUSIONES

Ha sido este un capítulo intenso, pero es que las variables en PowerShell, lo


cierto es que dan mucho de si, y en capítulos posteriores las vas a poder exprimir
al máximo, tanto en funciones como en otros apartados.

Más información,

PowerShell en Microsoft

Imagen de portada de Pankaj Patel en Unsplash

Listado de capítulos

Estos son todos los capítulos del tutorial PowerShell,

1.- Instalar PowerShell

2.- La ayuda de PowerShell

3.- Objetos en PowerShell

4.- Pipes en PowerShell o el arte de encadenar comandos

5.- Variables en PowerShell

6.- Arrays y diccionarios en PowerShell

7.- Condicionales en PowerShell

8.- Bucles en PowerShell

https://atareao.es/tutorial/powershell/variables-en-powershell/ 10/13
14/11/21 09:18 Variables en PowerShell - Atareao

Eventos y acciones en Polybar


Arrastrar y soltar con JavaScript y GJS

EVENTOS Y ACCIONES EN POLYBAR


Si quieres mejorar la interacción y experiencia de uso con tu barra de
estado tienes que exprimir los eventos y acciones en Polybar

ARRASTRAR Y SOLTAR CON JAVASCRIPT Y GJS


En este capítulo encontrarás como arrastrar y soltar con JavaScript en tu
aplicación, para que sea mas cómoda de utilizar al usuario

DEJA UNA RESPUESTA

Tu dirección de correo electrónico no será publicada. Los campos obligatorios


están marcados con *

Comentario

Nombre *

Correo electrónico *

Web

https://atareao.es/tutorial/powershell/variables-en-powershell/ 11/13
14/11/21 09:18 Variables en PowerShell - Atareao

Publicar el comentario

Buscar

Dona para ayudarme con este proyecto

2010 - 2021
Lorenzo Carbonell
Aviso legal

YouTube
iVoox
Spotify
Apple podcast
Google podcast

Telegram
Twitter
https://atareao.es/tutorial/powershell/variables-en-powershell/ 12/13
14/11/21 09:18 Variables en PowerShell - Atareao

Mastodon
GitHub
RSS

Suscribir
Contactar
Quien soy

https://atareao.es/tutorial/powershell/variables-en-powershell/ 13/13

También podría gustarte