Powershell permite almacenar valores en variables. Todas los nombres de variable
comienzan con el signo $, y se componen de letras, números y la raya de
subrayar (_).
El operador de asignación es el signo igual (=). Algunos ejemplos:
| Comando | Descripción |
|---|---|
$servidor = "localhost" |
La variable contendrá una cadena de texto |
$numero = 5 |
La variable contendrá un número entero |
$servicios = Get-Service |
La variable contendrá una lista de servicios |
Si se desea consultar el tipo de datos que contiene una variable, se puede
hacer con el cmdlet Get-Member. Por ejemplo:
PS> $servidor | gm
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System...
CompareTo Method int CompareTo(System.Object v...
Contains Method bool Contains(string value)
PS> $numero | gm
TypeName: System.Int32
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object value), int Compa...
Equals Method bool Equals(System.Object obj), bool Equals(i...
GetHashCode Method int GetHashCode()Get-Member también despliega las propiedades y métodos de la variable. Por
ejemplo, las variables tipo System.String poseen el método ToUpper(), que
convierte el contenido de la variable a mayúsculas:
PS> $servidor.ToUpper()
LOCALHOSTLas variables pueden emplearse para sustituir cualquier parámetro en la llamada
a un cmdlet. Teniendo en cuenta el valor de la variable $servidor en esta
guía, estas dos órdenes son equivalentes:
Get-WmiObject Win32_ComputerSystem -computername localhost
Get-WmiObject Win32_ComputerSystem -computername $servidorLas comillas sencillas se emplean para asignar a una variable el texto exacto que se ponga entre ellas, por ejemplo:
PS> $var = 'Hola'
PS> $var = 'El contenido de la variable es $var'
PS> $var
El contenido de la variable es $varSe podría pensar que Powershell desplegaría El contenido de la variable es
hola, pero las comillas sencillas hacen que el signo $ no se interprete
como inicio del nombre de una variable.
Para lograr que Powershell interprete el signo $ como inicio del nombre de
una variable, se efectúa la asignación con comillas dobles:
PS> $var = 'Hola'
PS> $var="La variable contiene $var"
PS> $var
La variable contiene HolaLa comilla invertida ` hace que Powershell ignore el significado del
siguiente caracter especial, por ejemplo:
PS> $var = 'Hola'
PS> $var="La variable `$var contiene $var"
PS> $var
La variable $var contiene HolaTambién puede emplearse para dar significado especial a ciertos caracteres
(equivale a \ en C y Java, por ejemplo \n, \t...). Un ejemplo de
uso es el siguiente:
PS> $nombrecompu = 'localhost'
PS> $frase = "`$nombrecompu`ncontiene`n$nombrecompu"
PS> $frase
$nombrecompu
contiene
localhostComo se puede ver, `n simboliza el caracter de retorno de carro.
Es posible crear una variable tipo lista, separando los valores de la lista con comas:
PS> $computadores = 'servidor', 'localhost', 'servidor_2'
PS> $computadores
servidor
localhost
servidor_2Los elementos de la lista se pueden acceder por número índice. Las listas se numeran desde el cero:
PS> $computadores[0]
servidor
PS> $computadores.count
3A partir de la versión 3 de Powershell, si se pasa una lista como parámetro de un cmdlet, Powershell itera sobre los elementos de la lista. Por ejemplo, el siguiente comando despliega información sobre los tres computadores que figuran en la lista:
get-wmiobject win32_computersystem -comp $computadoresTambién es posible iterar sobre una lista empleando el cmdlet Foreach-Object.
Estas dos órdenes hacen lo mismo:
$computadores = $computadores.tolower()
$computadores = $computadores | ForEach-Object {$_.tolower()}Hay ocasiones en que es necesario asegurarse que el tipo de una variable es el correcto para la operación que se desea realizar. Analice el siguiente ejemplo:
PS> $numero = read-host "Introduzca un número"
Introduzca un número: 1024
PS> $numero = $numero * 10
PS> $numero
1024102410241024102410241024102410241024El resultado de esta operación no es el esperado, pero esto ocurre porque el
cmdlet read-host retorna un valor tipo System.String.
Se puede corregir esta situación, forzando a Powershell a hacer la conversión del valor digitado a tipo entero:
PS> [int]$numero = read-host "Introduzca un número"
Introduzca un número: 1024
PS> $numero = $numero * 10
PS> $numero
10240Los tipos de datos que se pueden emplear son:
[int]para enteros,[single]y[double]para números de punto flotante de precisión sencilla y doble,[string]para cadenas,[char]para caracteres,[xml]para un documento XML; el valor es validado como contenido XML.
Powershell incluye los siguientes comandos para manipular variables:
New-VariableSet-VariableRemove-VariableGet-VariableClear-Variable
Con excepción del comando Remove-Variable, todos los demás se ejecutan
de forma implícita empleando la sintaxis que se ha usado en esta guía.
El cmdlet Read-Host despliega un mensaje de solicitud, y luego lee una
respuesta del usuario. Por ejemplo:
PS> Read-Host "Introduzca un nombre de computador"
Introduzca un nombre de computador: SERVIDOR
SERVIDOREl cmdlet agrega dos puntos (:) después del mensaje de solicitud, y coloca la respuesta del usuario en el pipeline. En la mayoría de los casos, la respuesta del usuario se captura en una variable, como en el siguiente ejemplo:
PS> $computador = Read-Host "Introduzca un nombre de computador"
Introduzca un nombre de computador: SERVIDORPara escribir datos a la consola, existen dos métodos:
Write-Host: Permite escribir datos directamente a la consola, saltándose el pipeline. Por esta razón, su salida no puede ser capturada ni redirigida a logs. Se recomienda no usarlo.Write-Output: Permite escribir datos al pipeline. Si no hay redirección a otro comando, los datos saldrán por pantalla. Esta es la manera recomendada de imprimir datos por consola.
Powershell tiene otros cmdlets para producir salida a consola. Ninguna de ellas
emplea el pipeline (funcionan como Write-Host), pero su salida se puede
suprimir a voluntad, mediante el uso de variables de entorno. Los comandos son
los siguientes:
| Comando | Descripción |
|---|---|
Write-Warning |
Imprime el mensaje en color naranja, precedido por la palabra WARNING. Su impresión depende del valor de la variable $WarningPerference, que por omisión tiene el valor Continue. |
Write-Verbose |
Imprime el mensaje en color azul, precedido por la palabra VERBOSE. Su impresión depende del valor de la variable $VerbosePreference, que por omisión se fija en SilentlyContinue. |
Write-Debug |
Imprime el mensaje en color azul, precedido por la palabra DEBUG. Su impresión depende del valor de la variable $DebugPreference, que por omisión tiene el valor SilentlyContinue. |
Write-error |
Genera un mensaje de error. Su impresión depende del valor de la variable $ErrorActionPreference, que por omisión tiene el valor Continue. |
Si la variable correspondiente al comando tiene el valor Continue, el mensaje
se imprime. Si el valor es SilentlyContinue, se suprime la impresión del
mensaje.