TEMA
about_Hash_Tables
DESCRIPCIÓN BREVE
Describe cómo se crean, utilizan y ordenan las tablas hash en Windows
PowerShell.
DESCRIPCIÓN DETALLADA
Una tabla hash, también denominada diccionario o matriz
asociativa, es una estructura de datos compacta que almacena uno
o más pares de nombre/valor. Por ejemplo, una tabla hash podría
contener una serie de nombres e identificadores de empleados, los
nombres de los equipos y sus direcciones IP, o los identificadores
de los mensajes y sus textos respectivos.
Las tablas hash se utilizan con frecuencia porque son muy
eficaces para buscar y recuperar datos. Las tablas hash se pueden
utilizar para almacenar listas y crear propiedades calculadas en
Windows PowerShell. Además, Windows PowerShell posee un cmdlet,
ConvertFrom-StringData, que convierte las cadenas en una tabla hash.
Crear tablas hash
Los elementos de una tabla hash se organizan en pares de
nombre/valor, como:
Msg1="Por favor, escriba su contraseña."
Msg2="El parámetro path es obligatorio."
Msg3="El alias de Get-Command es gcm."
Los valores se asignan o asocian a los nombres, de tal forma
que, cuando se envía el nombre, Windows PowerShell devuelve el
valor.
En Windows PowerShell, la sintaxis de una tabla hash es la siguiente:
@{ <nombre> = <valor>; [<nombre> = <valor> ] ...}
Al crear una tabla hash, deben seguirse estas instrucciones:
- La tabla hash debe comenzar por un símbolo de arroba (@).
- La tabla hash debe ir entre llaves ({}).
- Deben escribirse uno o varios pares de nombre-valor para el
contenido de la tabla hash.
- Se utiliza el signo igual (=) para separar cada nombre de
su valor.
- Se utiliza el signo de punto y coma (;) para separar los
pares de nombre/valor entre sí.
- Si un nombre o valor contiene espacios, se debe indicar entre
comillas dobles.
Por ejemplo, una tabla hash compuesta por los mensajes de usuario
anteriores, sería así:
@{
Msg1="Por favor, escriba su contraseña.";
Msg2="El parámetro path es obligatorio.";
Msg3="El alias de Get-Command es gcm.";
}
Para utilizar una tabla hash en los scripts y los comandos, se debe
guardar en una variable. El valor de la variable es un objeto de
tabla hash (System.Collections.Hashtable) y cada nombre en los pares
de nombre/valor es una propiedad del objeto de tabla hash.
Los comandos siguientes guardan la tabla de mensajes de usuario
en una variable $a y utiliza el método del punto para mostrar
los valores.
C:\PS> $a = @{
>> Msg1="Por favor, escriba su contraseña.";
>> Msg2="El parámetro path es obligatorio.";
>> Msg3="El alias de Get-Command es gcm.";
>> }
C:\PS> $a
Nombre Valor
---- -----
Msg1 Por favor, escriba su contraseña.
Msg3 El alias de Get-Command es gcm.
Msg2 El parámetro path es obligatorio.
C:\PS> $a.Msg1
Por favor, escriba su contraseña.
Las tablas hash no se limitan a un tipo de datos. Puede
escribir cualquier tipo de datos en una tabla hash y también
combinar varios tipos de datos en una misma tabla hash. Por
ejemplo, puede generar una tabla hash que contenga un entero,
una llamada a un cmdlet y una cadena.
Ordenar las tablas hash
Para ordenar las tablas hash por claves o valores
alfabéticamente, se utiliza el método GetEnumerator de las
tablas hash para obtener las claves y los valores que contiene y,
a continuación, se utiliza el cmdlet Sort-Object para ordenarlos.
Por ejemplo, el comando siguiente ordena la tabla hash
contenida en $a alfabéticamente por claves.
C:\PS> $a.getenumerator() | sort-object -property key
Nombre Valor
---- -----
Msg1 Por favor, escriba su contraseña.
Msg2 El parámetro path es obligatorio.
Msg3 El alias de Get-Command es gcm.
El comando siguiente utiliza el mismo método para ordenar los
valores hash en orden descendente.
C:\PS> $a.getenumerator() | sort-object -property value -descending
Nombre Valor
---- -----
Msg1 Por favor, escriba su contraseña.
Msg2 El parámetro path es obligatorio.
Msg3 El alias de Get-Command es gcm.
ConvertFrom-StringData
El cmdlet ConvertFrom-StringData convierte una cadena o una cadena
multilínea intercalada en el código de pares de nombre/valor en una
tabla hash. El cmdlet ConvertFrom-StringData se puede utilizar sin
ningún riesgo en la sección de datos de un script. Además, se puede
usar con el cmdlet Import-LocalizedData para mostrar los mensajes de
usuario en la referencia cultural de la interfaz de usuario (IU) del
usuario actual.
Las cadenas multilínea intercaladas en el código resultan
especialmente útiles cuando los valores de la tabla hash
incluyen comillas dobles. (Para obtener más información sobre
las cadenas multilínea intercaladas en el código, vea
about_Quoting_Rules.)
En el ejemplo siguiente se muestra cómo crear una cadena multilínea
intercalada en el código compuesta de los mensajes de usuario del ejemplo
anterior, y cómo utilizar ConvertFrom-StringData para convertir la
cadena en una tabla hash.
El comando siguiente crea una cadena multilínea intercalada en
el código de pares de nombre/valor y, a continuación, la guarda
en la variable $string.
C:\PS> $string = @"
Msg1="Por favor, escriba su contraseña."
Msg2="El parámetro path es obligatorio."
Msg3="El alias de Get-Command es gcm." "@
Este comando utiliza el cmdlet ConvertFrom-StringData para
convertir la cadena multilínea intercalada en el código en una
tabla hash.
C:\PS> convertfrom-stringdata $string
Nombre Valor
---- -----
Msg3 "El alias de Get-Command es gcm."
Msg2 "El parámetro path es obligatorio."
Msg1 "Por favor, escriba su contraseña."
VEA TAMBIÉN
about_Arrays
about_Quoting_Rules
about_Script_Internationalization
ConvertFrom-StringData
Import-LocalizedData