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