Guía definitiva de PowerShell Hashtable con ejemplos
Una tabla hash de PowerShell consta de elementos de colección y sus valores. Los elementos se denominan claves. Además, cada clave en una tabla hash tiene un valor equivalente.
Esencialmente, una tabla hash de PowerShell es una 'tabla' de almacenamiento de clave/valor.
En esta S-Zone, te enseñaré todo lo que necesitas saber sobre las tablas hash de PowerShell. La primera sección examina la diferencia entre una tabla hash y una matriz.
Luego, en la segunda sección, con el Obtener miembro Cmdlet, te llevaré detrás del capó de Hashtables.
Finalmente, exploraré diferentes formas de usar tablas hash en scripts.
Explorar temas de publicaciones
- PowerShell-Hashtable frente a PowerShell-Array
- Métodos y propiedades de la tabla hash de PowerShell
- Cómo agregar o eliminar elementos de una tabla hash existente
- Cómo verificar si una tabla hash de PowerShell contiene una clave
- Cómo convertir una tabla hash de PowerShell en una cadena
- Cómo usar el método GetEnumerator de PowerShell Hashtable
- Cómo contar los elementos de la tabla hash de PowerShell
- Cómo crear una tabla hash de PowerShell vacía y agregar claves
- Cómo crear una tabla hash de PowerShell con múltiples valores y una clave
- Cómo iterar la tabla hash de PowerShell con ForEach Loop
- Cómo personalizar un informe usando PowerShell Hashtable y Select-Object
- Cómo exportar la tabla hash de PowerShell a CSV
- Referencias y lecturas adicionales
PowerShell-Hashtable frente a PowerShell-Array
Antes de sumergirme en las tablas hash, quiero explicar la diferencia entre tablas hash y matrices. Esta distinción es importante porque los dos conceptos pueden confundirse fácilmente.
En la introducción a esta guía, expliqué que una tabla hash es un almacén de clave/valor. Además, una tabla hash es como una tabla de claves y valores.
Por el contrario, una matriz de PowerShell es una colección de valores u objetos.
complemento de karaoke para kodi
La principal diferencia entre una tabla hash de PowerShell y una matriz de PowerShell es que una tabla hash es una colección de elementos (claves) y sus valores, mientras que una matriz es solo una lista de elementos.
Como ejemplo rápido, los siguientes códigos son ejemplos de tablas hash y una matriz: el primer código crea tablas hash, mientras que el segundo código crea una matriz:
|_+_| |_+_| A partir de los ejemplos de código, puede ver que una tabla hash está encerrada en {}, una matriz en ().La siguiente captura de pantalla muestra los resultados de los dos códigos.
La parte de la captura de pantalla marcada con (1) es el resultado de la tabla hash. ¿Viste el par clave/valor?
En el ejemplo anterior, la clave raíz tiene el valor C:UsersvictoDocuments. Además, la clave PSProvider tiene un valor denominado FileSystem.
Finalmente, Nombre es Documento.
Además, la parte de la captura de pantalla marcada (2) contiene el resultado del código de matriz. Como se mencionó, es solo una lista.
Métodos y propiedades de la tabla hash de PowerShell
En la introducción, prometí llevarlo detrás del capó de PowerShell Hashtables. ¡Eso es todo!
En esta sección, le enseñaré cómo usar el cmdlet Get-Member para mirar detrás de las tablas hash.
Cuando canaliza el resultado a una tabla hash de PowerShell Obtener miembro , puedes ver los disponibles métodos y Características la tabla hash.
Volviendo a nuestro primer ejemplo rápido anterior:
|_+_|Copie el código en un nuevo documento de PowerShell ISE. Luego ejecuta el código.
Entonces ver disponible métodos y Características En esta tabla hash, ejecute este comando en el mismo PowerShell ISE.
|_+_|Para ejecutar el comando anterior, péguelo debajo del último código. Luego resáltelo y presione F8 o haga clic en el icono resaltado.
El comando muestra los resultados en el panel de la consola de PowerShell.
Primero mira el resultado. Tiene TypeName: System.Collections.Hashtable.
¡Esto confirma que los objetos canalizados en el cmdlet Get-Member son una tabla hash!
En las siguientes subsecciones de esta sección, le muestro cómo usar los métodos y las propiedades comunes de una tabla hash de PowerShell.
Cómo agregar o eliminar elementos de una tabla hash existente
Esta sección le muestra cómo agregar nuevos elementos a una tabla hash de PowerShell existente. También aprenderá a eliminar un elemento de una tabla hash de PowerShell existente.
Antes de entrar en eso, quiero mencionar que también puede crear una tabla hash vacía. Luego agregue claves/valores a la tabla hash; más sobre eso más adelante.
Volver a agregar o quitar elementos a los hastables existentes de PowerShell: cuando ejecutamos esos $tabla hash | Obtener miembro comando es uno de los métodos que se muestran en el resultado añadir . También hay un método Remover .
Echa un vistazo a las partes resaltadas de la captura de pantalla a continuación:
Antes de mostrarle cómo usar estos dos métodos, veamos el código original de la tabla hash de PowerShell:
|_+_|La tabla hash tiene 3 entradas. En este ejemplo, agrego otra clave llamada 'Descripción' con el valor 'Mapas' a mi carpeta 'Mis documentos'.
Para completar esta tarea, ejecuto el siguiente comando (en la misma consola PowerShell ISE donde ejecuté los comandos anteriores).
|_+_| Observe cómo agrego el Agregar Método . Agrego un punto (.) al lado de la variable que contiene la tabla hash. Luego agregué el método añadir , seguido por (). Finalmente, inserté el nuevo par clave/valor que quiero agregar a la tabla hash.Después de ejecutar el comando, verifique para confirmar que se ha agregado la clave adicional $tabla hash y presione F8.
|_+_|Aquí hay una captura de pantalla del resultado, que confirma que se agregó la nueva clave/valor.
A continuación, puede usar el mismo enfoque para eliminar un valor de una tabla hash de PowerShell.
Para eliminar la última clave que agregamos a la tabla hash, ejecute un comando similar al último comando. Esta vez, sin embargo, reemplaza esos añadir método con el Remover Método.
Aquí está el comando:
|_+_| Del Remover El método contiene solo el llave . No tienes que proporcionar la clave. valor en comando.Primero ejecute el comando anterior. Luego marque para confirmar que la clave ha sido eliminada $tabla hash y presione F8.
|_+_|¡El resultado del comando confirma que se ha quitado la llave!
Cómo verificar si una tabla hash de PowerShell contiene una clave
Cuando le pasamos el hastable al Obtener miembro cmdlet, uno de los métodos que se muestran es el Contiene claves Método: vea la captura de pantalla a continuación.
|_+_|
Del Contiene claves El método se puede utilizar de muchas maneras. Sin embargo, una de las aplicaciones más comunes de este método es usarlo para verificar si existe una clave en una tabla hash y, si no, agregar la clave.
Otra aplicación de Contiene claves El método de una tabla hash de PowerShell es simplemente usarla para comprobar si existe un nombre de clave en la tabla hash.
Para verificar si existe una clave en una tabla hash de PowerShell, use el Contiene claves Ejecute el siguiente comando:
|_+_|Este comando verifica si existe una clave con nombre de descripción en la tabla hash almacenada en la variable $hashtable. El resultado del comando muestra Falso.
Para verificar que la clave de descripción existe antes de agregarla a la tabla hash de PowerShell, necesitamos una línea de código adicional al comando anterior.
Aquí está el código mejorado.
|_+_|El código utiliza la instrucción IF condicional para verificar si existe una descripción con nombre clave en la tabla hash.
Luego, si el resultado es Falso, en la parte de ejecución del comando de la declaración IF usamos el añadir Método de tabla hash de PowerShell para agregar la clave a la tabla hash.
Sin embargo, si la clave existe en la tabla hash, mostramos un mensaje en la parte Else de la instrucción IF que informa a la persona que ejecutó el comando que la clave ya existe.
Después de ejecutar el último comando, resalte el $tabla hash variable y ejecutarlo solo. El resultado confirma que la clave Descripción se agregó a la variable porque no existía.
Para probar si este script funciona, ejecútelo de nuevo...
|_+_|Esta vez, el script no agregó la clave. Más bien, devolvió la información en la parte Else de la declaración IF: La clave ya existe en la tabla hash. .
Cómo convertir una tabla hash de PowerShell en una cadena
El primer paso para convertir una tabla hash de PowerShell en una cadena es devolver los valores de las claves en la tabla hash. En otras palabras, convierte la tabla hash de PowerShell en una matriz de PowerShell.
Para devolver los valores en una tabla hash, llame al Valores Propiedad de la tabla hash.
Aquí está el comando que devuelve los valores en una tabla hash:
|_+_|Después de devolver los valores en una tabla hash de PowerShell, el siguiente paso es pasar $hashtable.Values al fuera de cadena Dominio…
|_+_| Más adelante en esta guía, verá la importancia de convertir una tabla hash de PowerShell en una cadena. Para ver la aplicación práctica de esto en secuencias de comandos reales de SysAdmin, siga leyendo.Cómo usar la tabla hash de PowerShell ObtenerEnumerador Método
Otro método importante de una tabla hash de PowerShell es el ObtenerEnumerador Método.
Puede utilizar este método para dividir las claves de una tabla hash en cadenas individuales. Aquí hay un comando de ejemplo del ObtenerEnumerador Método de una tabla hash:
|_+_|Como puede ver en el resultado del comando anterior, las claves y los valores se devuelven en encabezados individuales. No puedo pensar en una aplicación en este momento, pero si alguna vez necesita resolver las claves en una tabla hash de PowerShell, ¡sabe cómo hacerlo!
Cómo contar los elementos de la tabla hash de PowerShell
Hay otra propiedad útil de Hashtable, Para contar . Como sugiere el nombre, esta propiedad devuelve el número de claves en una tabla hash.
Como Valores propiedad, use un comando similar al siguiente para obtener la propiedad Count:
|_+_|El comando confirma que la tabla hash $hashtable tiene 4 claves.
Cómo crear una tabla hash de PowerShell vacía y agregar claves
Hasta ahora, todos los ejemplos de esta zona S se han centrado en la manipulación de tablas hash de PowerShell con claves existentes. En esta sección, aprenderá a crear una tabla hash vacía.
Luego agregue claves a la tabla hash.
Para crear una tabla hash de PowerShell vacía, simplemente escriba el @ caracteres seguidos de {} soportes. Aquí hay un ejemplo de una tabla hash vacía almacenada en una variable. Tabla hash vacía :
|_+_|Ejecute el comando anterior para confirmar que la tabla hash se creó sin valores. Luego ejecute la variable sola.
|_+_|El siguiente paso es utilizar añadir Método cubierto anteriormente en esta guía para agregar claves/valores a la tabla hash. En este ejemplo, agrego una clave llamada Nombre , con un valor de Documento .
Aquí está el comando para realizar esta tarea.
|_+_|Finalmente, para confirmar que los valores se agregaron correctamente, ejecute la variable $Emptyhashtable:
|_+_|El último comando confirma que los valores se agregaron con éxito:
Cómo crear una tabla hash de PowerShell con múltiples valores y una clave
En todos los ejemplos analizados hasta ahora, la tabla hash de PowerShell tiene un par clave/valor. Sin embargo, hay situaciones en las que es posible que necesite una sola clave en una tabla hash de varios valores.
En este caso, desea crear efectivamente una tabla hash con matrices como valores.
Para empezar, creo que es mejor mostrarles los códigos que usé para distinguir una tabla hash de una matriz.
|_+_| |_+_|Por lo tanto, para crear una tabla hash de PowerShell con claves únicas y valores múltiples, ejecute un script similar:
|_+_|En el guión de arriba Nombre del protocolo es la clave de la tabla hash, mientras que a la clave se le asignan los valores sistema, aplicación y seguridad. De hecho, creamos una única clave hastable de varios valores.
Para enumerar los valores individuales en el Nombre del protocolo Ejecute el siguiente comando:
garry's mod lua panic|_+_|
La parte de la captura de pantalla a continuación etiquetada (1) es el resultado de la tabla hash, $hashtableWithArrays . Además, la parte etiquetada (2) muestra el resultado de la $hashtableWithArrays.Valores Dominio.
Si está familiarizado con los registros de eventos de Windows (Sistema, Aplicación y Seguridad) son nombres de registros de eventos de Windows.
En la siguiente sección, le mostraré cómo usar el bucle ForEach de PowerShell para iterar a través de la tabla hash anterior y ejecutarla. Obtener registro de eventos Comando para estos 3 registros de eventos, con un único script de PowerShell.
Cómo iterar la tabla hash de PowerShell con ForEach Loop
En la última sección, creé una tabla hash de PowerShell de una clave con varios valores.
Para el ejemplo de esta sección, modifiqué la variable que almacena la tabla hash LogNameKeys . Aquí está el guión actualizado.
|_+_|En esta sección te enseñaré a usarlo. Para cada para recorrer los valores almacenados en el Nombre del protocolo botón y ejecutar el Obtener registro de eventos Dominio.
Para un curso de actualización rápida sobre PowerShell ForEach, a continuación se muestra la sintaxis general de un comando de PowerShell ForEach:
|_+_|Si aplica la sintaxis anterior a la nuestra nombres de registro hashtable, el comando actualizado se ve así:
Las líneas que comienzan con # son comentarios de PowerShell. |_+_|La primera parte del script es el mismo script que crea la tabla hash de PowerShell de una sola clave y varios valores. Aquí está el guión:
|_+_|En la segunda parte del script, convertí los valores almacenados en ($LogNameKeys.Values) a cadenas y almacené el resultado en otra variable. LogNameKeysAsStrings .
|_+_|Finalmente, la tercera parte del script presenta el bucle ForEach:
|_+_|En esta parte del script, le decimos a PowerShell que tome cualquier valor almacenado en el Nombre del protocolo Llave ( $ LogNameKeysAsStrings ) – almacenar temporalmente este valor individual en la variable LogNameKey – Luego use la variable temporal para ejecutar el Obtener registro de eventos Dominio.
yo incluí esos Más reciente parámetros de Obtener registro de eventos Comando con un valor de 5, por lo que el comando devuelve las últimas 5 entradas de cada registro de eventos. Cuando observa un script de PowerShell, puede parecer complicado. En una inspección más cercana, sin embargo, por lo general es muy simple.Ahora copie el siguiente script en un nuevo documento PowerShell ISE y ejecútelo.
Abra PowerShell ISE como administrador. Si no abre PowerShell ISE como administrador, recibirá mensajes de error de acceso. |_+_|La siguiente captura de pantalla muestra el resultado del script. Hay 15 filas en el panel de resultados, que representan 5 de los registros de eventos del sistema, la aplicación y la seguridad.
Cómo personalizar un informe usando PowerShell Hashtable y Select-Object
En la última sección, creamos un script de PowerShell que recupera el informe de registro de eventos de Windows. Aquí hay una captura de pantalla del informe.
La salida estándar del script tiene 5 columnas: Índice , tiempo , tipo de entrada , Aquellos , ID de instancia , y noticias . Si está enviando esto como un informe, es posible que desee cambiar los nombres de las columnas por nombres fáciles de entender.
Aquí está el guión de la última sección.
El guión fue ligeramente modificado. Ahora tengo una variable, Informe de registro de eventos que almacena la salida del bucle ForEach. Explicaré más adelante por qué esto es necesario. |_+_|Para cambiar los nombres de los encabezados de columna de este script, dirigiremos el Obtener registro de eventos mandar a un Seleccionar objeto Dominio.
A continuación, cree una tabla hash de PowerShell dentro del Seleccionar objeto Comando que cambia los nombres de las columnas. Aquí está el script modificado que hace la magia.
|_+_|El guión parece mucho más complejo de lo que realmente es. Sin embargo, si se enfoca en la parte del script después de Select-Object, es fácil notar la diferencia entre este script y la copia anterior.
En particular, tengo tablas hash en el Seleccionar objeto bloque de código. Cada tabla hash ajusta la salida del Obtener registro de eventos Dominio.
Aquí hay un ejemplo de tabla hash de la Seleccionar objeto Bloquear:
|_+_|Como es habitual, la tabla hash de PowerShell tiene dos elementos. La clave es la Nombre , el valor es el Expresión .
Otra cosa importante a tener en cuenta es que al final de cada tabla hash en el Seleccionar objeto bloque, hay una coma (,).
Finalmente, aquí está el resultado del último script en PowerShell:
Anteriormente prometí explicar por qué presenté $EventLogReport -Variable para almacenar la salida del bucle ForEach. Sin esta variable, el resultado final muestra 3 resultados individuales para cada uno de los 3 registros de eventos. Sin embargo, al almacenar el resultado completo en una variable, pude canalizar esa variable a Format-Table; esto muestra el resultado completo como una sola tabla. Aquí está el comando que realizó la magia. |_+_|Cómo exportar la tabla hash de PowerShell a CSV
En esta sección final, aprenderá cómo exportar una tabla hash de PowerShell a CSV.
En mi primer ejemplo de esta sección, le mostraré cómo exportar este hashtabe a CSV.
|_+_|Para exportar con éxito esta tabla hash de PowerShell a un archivo CSV, debe usar el ObtenerEnumerador Método (discutido previamente) para enumerar los valores. De lo contrario, los pares clave/valor reales no se exportan.
Aquí está el script modificado que exporta la tabla hash almacenada en el tabla de picadillo variable a un archivo CSV.
|_+_|Introducido en el siguiente guión:
|_+_|El guión contiene la ObtenerEnumerador Método en la tabla hash. Luego dirige la salida al Seleccionar objeto Dominio.
Finalmente dirijo la salida del Seleccionar objeto mando a la Exportar-CSV Dominio. Para leer más sobre el uso Exportar-CSV Cmdlet, lea nuestra guía - Powershell NoTypeInformation: aplicaciones y ejemplos.
Cuando ejecute este script, creará un archivo CSV llamado hashtable.csv , en la ruta que especificó. Vea la captura de pantalla a continuación para ver la salida del archivo CSV.
|_+_|
En mi segundo ejemplo, exportaré el resultado del script que creamos en la última sección, el script de registro de eventos, a un archivo CSV.
Aquí está el guión. Para exportar el informe a CSV, agregué el siguiente código al final de este script.
|_+_| |_+_|El código reenvía la salida de Para cada bucle – almacenado en el Informe de registro de eventos variable - a la Exportar comando csv . El archivo CSV generado se muestra en la siguiente captura de pantalla.
Eso es todo: ¡una guía completa de las tablas hash de PowerShell! ¿Espero que lo haya encontrado util?
Si te resultó útil, por favor vota y a la pregunta ¿Fue útil esta publicación a continuación?
Alternativamente, puede hacer una pregunta, dejar un comentario o proporcionar más comentarios utilizando el formulario 'Dejar una respuesta' en la parte inferior de esta página.
Finalmente, puede encontrar más zonas de PowerShell Tech S en nuestra página de procedimientos de Windows PowerShell. También puede encontrar muy útil nuestra página Trabajar desde casa.


