Guia definitiva de PowerShell Hashtable amb exemples

20 de maig de 2021 5546 Vistes PowerShell Hashtable La vostra guia definitiva amb exemples

Una taula hash de PowerShell és una col·lecció d'elements i els seus valors. Els elements s'anomenen claus. A més, cada clau d'una taula hash té un valor equivalent.





En essència, una taula hash de PowerShell és una 'taula' de la botiga de claus/valors.



En aquesta Zona S, us ensenyaré tot el que necessiteu saber sobre les taules hash de PowerShell. La primera secció explora la diferència entre una taula hash i una matriu.

A continuació, a la segona secció, utilitzant el Aconsegueix soci Cmdlet, us portaré darrere del capó de les taules hash.



Finalment, exploraré diferents maneres d'utilitzar les taules hash en els scripts.



Navega per temes de publicació

PowerShell Hashtable vs PowerShell Array

PowerShell Hashtable vs PowerShell Array

Abans de capbussar-me en Hashtables, vull explicar la diferència entre Hashtables i Arrays. Aquesta diferenciació és important ja que els dos conceptes es poden confondre fàcilment.



A la introducció d'aquesta guia, vaig explicar que una taula hash és una botiga de claus/valors. A més, una taula hash és com una taula amb claus i valors.



Per contra, un PowerShell Array és una col·lecció de valors o objectes.

La diferència principal entre una taula hash de PowerShell i una matriu de PowerShell és que una taula hash és una col·lecció d'elements (claus) i els seus valors, mentre que una matriu és només una llista d'elements.

Per a un exemple ràpid, els codis següents són exemples de taules hash i matriu: el primer codi crea taules hash mentre que el segon codi crea una matriu:

|_+_| |_+_| A partir dels exemples de codi, podeu veure que mentre una taula hash està tancada a {}, una matriu està tancada a ().

La captura de pantalla següent mostra els resultats dels dos codis.

PowerShell Hashtable vs PowerShell Array

La part de la captura de pantalla etiquetada (1) és el resultat de la taula hash. Heu vist el parell clau/valor?

A l'exemple anterior, la clau, Root té un valor de C:UsersvictoDocuments. A més, la clau PSProvider té un valor anomenat FileSystem.

Finalment, Nom té un valor de Document.

A més, la part de la captura de pantalla etiquetada (2) té el resultat del codi de matriu. Com hem explicat anteriorment, només és una llista.

Mètodes i propietats de la taula hash de PowerShell

Mètodes i propietats de la taula hash de PowerShell

A la introducció us vaig prometre portar-vos darrere del capó de PowerShell Hashtables. Això és tot!

En aquesta secció, us ensenyaré com utilitzar el cmdlet Get-Member per mirar darrere de les taules hash.

la vostra ubicació està en ús

Quan canalitzeu el resultat d'una taula hash de PowerShell a Aconsegueix soci , podreu revisar els disponibles Mètodes i Propietats de la taula hash.

Tornem al nostre primer exemple hastable anterior:

|_+_|

Copieu el codi en un nou document de PowerShell ISE. A continuació, executeu el codi.

Aleshores, per veure disponible Mètodes i Propietats en aquesta taula hash, executeu aquesta ordre al mateix PowerShell ISE.

|_+_|

Per executar l'ordre anterior, enganxeu-lo a sota de l'últim codi. A continuació, ressalteu-lo i premeu F8 o feu clic a la icona destacada.

Mètodes i propietats de la taula hash de PowerShell

L'ordre mostrarà els resultats al panell de la consola de PowerShell.

De moment, mireu el resultat. Té TypeName: System.Collections.Hashtable.

Això confirma que els objectes canalitzats al cmdlet Get-Member són una taula hash!

A les següents subseccions d'aquesta secció, us mostraré com utilitzar els mètodes i propietats habituals d'una taula hash de PowerShell.

Com afegir o eliminar elements a la taula hash existent

En aquesta secció, aprendràs a afegir nous elements a una taula hash de PowerShell existent. A més, també aprendràs a eliminar un element d'una taula hash de PowerShell existent.

Abans d'aprofundir-hi, vull esmentar que també podeu crear una taula hash buida. A continuació, afegiu claus/valors a la taula hash, més sobre això més endavant.

Torneu a afegir o eliminar elements als hastables de PowerShell existents, quan vam executar el $taula hash | Aconsegueix soci comanda, un dels mètodes que es mostren al resultat és Afegeix . També hi ha un mètode, Eliminar .

Vegeu les parts destacades de la captura de pantalla a continuació:

Mètodes i propietats de la taula hash de PowerShell

Abans de mostrar-vos com utilitzar aquests dos mètodes, mirem el codi original de la taula hash de PowerShell:

|_+_|

La taula hash té 3 entrades. En aquest exemple, afegiré una altra clau anomenada Descripció amb el valor Mapes a la meva carpeta 'Els meus documents'.

Per completar aquesta tasca, executaré l'ordre següent (a la mateixa consola PowerShell ISE que vaig executar les ordres anteriors)

|_+_| Tingueu en compte com he utilitzat Add Mètode . Afegeix un punt (.) al costat de la variable que conté la taula hash. Aleshores, vaig incloure el mètode, Afegeix , Seguit per (). Finalment, he inclòs el nou parell clau/valor que vull afegir a la taula hash.

Un cop executeu l'ordre, ressalteu per confirmar que s'ha afegit la clau addicional $hashtable i premeu F8.

l'iPhone no se sincronitza amb iphoto
|_+_|

Aquí hi ha una captura de pantalla del resultat: confirmant que s'ha afegit la clau o el valor nou.

Seguint endavant, podeu utilitzar el mateix enfocament per eliminar un valor d'una taula hash de PowerShell.

Per eliminar l'última clau que hem afegit a la taula hash, executeu una ordre similar a l'última ordre. Aquesta vegada, però, substituïu el Afegeix Mètode amb el Eliminar Mètode.

Aquí teniu l'ordre:

|_+_| El Eliminar El mètode només inclou el clau . No cal que incloguis la clau valor a l'ordre.

Primer, executeu l'ordre anterior. A continuació, per confirmar que s'ha eliminat la clau, ressalteu $hashtable i premeu F8.

|_+_|

El resultat de l'ordre confirma que la clau s'ha eliminat!

Mètodes i propietats de la taula hash de PowerShell: com afegir o eliminar elements a una taula hash existent

Com comprovar si una taula hash de PowerShell conté una clau

Quan vam connectar el hastable de sota al Aconsegueix soci Cmdlet, un dels mètodes que es mostren és el Conté la clau Mètode: vegeu la captura de pantalla a continuació.

|_+_|

El Conté la clau El mètode es pot utilitzar de moltes maneres. Tanmateix, una de les aplicacions habituals d'aquest mètode és utilitzar-lo per comprovar si existeix una clau en una taula hash i, si no, afegir la clau.

Una altra aplicació de la Conté la clau El mètode d'una taula hash de PowerShell és simplement utilitzar-la per comprovar si existeix un nom de clau a la taula hash.

Per comprovar si existeix una clau en una taula hash de PowerShell mitjançant l' Conté la clau Mètode, executeu l'ordre següent:

|_+_|

Aquesta ordre comprova si existeix una clau amb el nom Descripció a la taula hash desada a la variable $hashtable. El resultat de l'ordre mostra False.

Mètodes i propietats de la taula hash de PowerShell: com comprovar si una taula hash de PowerShell conté una clau

Per comprovar si la clau de descripció existeix abans d'afegir-la a la taula hash de PowerShell, necessitarem una línia de codis addicional a l'ordre anterior.

Aquí teniu el codi millorat.

|_+_|

El codi utilitza la instrucció condicional IF per comprovar si existeix una clau amb el nom Descripció a la taula hash.

Aleshores, si el resultat és Fals, a la part d'execució d'ordres de la instrucció IF, fem servir el Afegeix Mètode de la taula hash de PowerShell per afegir la clau a la taula hash.

Tanmateix, si la clau existeix a la taula hash, a la part Else de la instrucció IF, mostrem un missatge informant a la persona que va executar l'ordre que la clau ja existeix.

Després d'executar l'última ordre, ressalteu $hashtable variable i executeu-lo sol. El resultat confirma que la clau Descripció s'ha afegit a la variable perquè no existia.

Per provar si aquest script funciona, torneu-lo a executar...

|_+_|

Aquesta vegada, el guió no va afegir la clau. Més aviat, va tornar la informació a la part Else de la declaració IF: La clau ja existeix a la taula hash .

Mètodes i propietats de la taula hash de PowerShell: com comprovar si una taula hash de PowerShell conté una clau

Com convertir una taula hash de PowerShell en cadena

El primer pas per convertir una taula hash de PowerShell en una cadena és retornar els valors de les claus de la taula hash. En altres paraules, convertiu la taula hash de PowerShell en una matriu de PowerShell.

Per retornar els valors d'una taula hash, truqueu a Valors propietat de la taula hash.

Aquesta és l'ordre que retorna els valors en una taula hash:

|_+_|

Un cop hàgiu retornat els valors en una taula hash de PowerShell, el següent pas és canalitzar $hashtable.Values ​​al Força de corda Comandament…

|_+_| Més endavant en aquesta guia, apreciareu la importància de convertir una taula hash de PowerShell en una cadena. Per veure l'aplicació pràctica d'això en un script de SysAdmin del món real, segueix llegint.

Com utilitzar PowerShell Hashtable GetEnumerator Mètode

Un altre mètode important d'una taula hash de PowerShell és el GetEnumerator Mètode.

Podeu utilitzar aquest mètode per separar les claus d'una taula hash en cadenes individuals. Aquí teniu una mostra d'ordres del GetEnumerator Mètode d'una taula hash:

|_+_|

Com podeu veure al resultat de l'ordre anterior, les claus i els valors es retornen en capçaleres individuals. Ara no puc pensar en una aplicació, però, si mai necessiteu trencar les claus en una taula hash de PowerShell, ja sabeu com fer-ho!

Com comptar els elements de la taula hash de PowerShell

Hi ha una altra propietat de hashtable útil, Compte . Com el seu nom indica, aquesta propietat retorna el nombre de claus en una taula hash.

Com el Valors Propietat, per trucar a la propietat Count, utilitzeu una ordre similar a la següent:

|_+_|

L'ordre confirma que la taula hash, $hashtable té 4 claus.

tutorial de canviador de veu de peix pallasso
Com comptar els elements de la taula hash de PowerShell

Com crear una taula hash de PowerShell buida i afegir claus

Com crear una taula hash de PowerShell buida i afegir claus

Fins ara, tots els exemples d'aquesta Zona S s'han centrat a manipular la taula hash de PowerShell amb les claus existents. En aquesta secció, aprendràs a crear una taula hash buida.

A continuació, afegiu claus a la taula hash.

Per crear una taula hash de PowerShell buida, només cal que introduïu @ signe, seguit de {} claudàtors. Aquí teniu un exemple d'una taula hash buida desada en una variable, Emptyhashtable :

|_+_|

Per confirmar que la taula hash es crea sense valors, executeu l'ordre anterior. A continuació, executeu la variable per si sola.

|_+_|

El següent pas és utilitzar el Afegeix mètode, tractat anteriorment en aquesta guia, per afegir claus/valors a la taula hash. En aquest exemple, afegiré una clau, anomenada Nom , amb un valor de Document .

Aquí teniu l'ordre per realitzar aquesta tasca.

|_+_|

Finalment, per confirmar que els valors s'han afegit correctament, executeu la variable $Emptyhashtable:

|_+_|

L'última ordre confirma que els valors s'han afegit correctament:

Com crear una taula hash de PowerShell amb diversos valors i una clau

Com crear una taula hash de PowerShell amb diversos valors i una clau

En tots els exemples que hem tractat fins ara, la taula hash de PowerShell té un parell clau/valor. Tanmateix, hi ha circumstàncies en què és possible que necessiteu tenir una sola clau en una taula hash amb diversos valors.

En aquest cas, realment voleu crear una taula hash amb matrius com a valors.

Per començar, crec que és millor mostrar-vos els codis que vaig utilitzar per diferenciar una taula hash d'una matriu.

|_+_| |_+_|

Per tant, per crear una taula hash de PowerShell amb claus individuals i diversos valors, executeu un script similar a aquest:

|_+_|

En el guió de dalt, Nom de registre és la clau de la taula hash, mentre que els valors Sistema, Aplicació i Seguretat s'assignen a la clau. Efectivament, hem creat una única clau hastable amb diversos valors.

Per enumerar els valors individuals al Nom de registre clau, executeu l'ordre següent:

|_+_|

La part de la captura de pantalla a continuació etiquetada (1) és el resultat de la taula hash, $hashtableWithArrays . A més, la part etiquetada (2) mostra el resultat de la $hashtableWithArrays.Values comandament.

Si esteu familiaritzat amb els registres d'esdeveniments de Windows: sistema, aplicació i seguretat, són els noms dels registres d'esdeveniments de Windows.

A la següent secció, us mostraré com utilitzar el bucle PowerShell ForEach per iterar a través de la taula hash anterior i executar el Get-EventLog comanda en aquests 3 registres d'esdeveniments, utilitzant un únic script de PowerShell.

Com iterar PowerShell Hashtable amb ForEach Loop

Com iterar PowerShell Hashtable amb ForEach

A l'última secció, vaig crear una taula hash de PowerShell d'una sola clau amb diversos valors.

Per a l'exemple d'aquesta secció, he canviat la variable que emmagatzemava la taula hash LogNameKeys . Aquí teniu el guió actualitzat.

|_+_|

En aquesta secció, us ensenyaré com utilitzar-lo Per cadascú per recórrer els valors emmagatzemats al fitxer Nom de registre tecla i executar Get-EventLog comandament.

Per a un curs ràpid d'actualització sobre PowerShell ForEach, a continuació es mostra la sintaxi general d'una ordre de PowerShell ForEach:

|_+_|

Si apliqueu la sintaxi anterior al nostre Noms de registre hashtable, l'ordre actualitzada tindrà aquest aspecte:

Les línies que comencen amb # són comentaris de PowerShell . |_+_|

La primera part de l'script és el mateix script que crea la taula hash de PowerShell d'una sola clau amb diversos valors. Aquí teniu el guió:

|_+_|

A la segona part de l'script, vaig convertir els valors emmagatzemats a ($LogNameKeys.Values) en cadenes i vaig desar el resultat en una altra variable, LogNameKeysAsStrings .

|_+_|

Finalment, a la tercera part de l'script, s'introdueix el bucle ForEach:

giroscopi alcatel one touch ferotge xl
|_+_|

En aquesta part de l'script, diem a PowerShell que prengui cada valor emmagatzemat al fitxer Nom de registre clau ( $LogNameKeysAsStrings ) – deseu aquest valor individual temporalment a la variable LogNameKey – després, utilitzeu la variable temporal per executar el Get-EventLog comandament.

Vaig incloure el El més nou paràmetre de la Get-EventLog comanda amb un valor de 5 de manera que l'ordre retorni les 5 últimes entrades de cada registre d'esdeveniments. Quan mireu un script de PowerShell, pot semblar complicat. Tanmateix, si us fixeu bé, acostuma a ser molt fàcil.

Ara, copieu l'script següent en un nou document de PowerShell ISE i executeu-lo.

Obriu PowerShell ISE com a administrador. Si no obriu PowerShell ISE com a administrador, rebreu missatges d'error d'accés. |_+_|

La captura de pantalla següent mostrava el resultat de l'script. Hi ha 15 files al panell de resultats, que representen 5 de registres d'esdeveniments de sistema, aplicació i seguretat.

Com personalitzar un informe amb PowerShell Hashtable i Select-Object

Com personalitzar un informe amb PowerShell Hashtable i Select-Object

A l'última secció, vam crear un script de PowerShell que extreu l'informe del registre d'esdeveniments de Windows. Aquí teniu una captura de pantalla de l'informe

La sortida predeterminada de l'script té 5 columnes: Índex , Temps , EntryType , Font , ID de la instància , i Missatge . Si l'envieu com a informe, és possible que vulgueu canviar aquests noms de columnes per noms que siguin fàcilment comprensibles.

Aquí teniu el guió de l'última secció.

El guió s'ha modificat lleugerament. Ara tinc una variable, Informe de registre d'esdeveniments que desa la sortida del bucle ForEach. Explicaré per què això és necessari més endavant. |_+_|

Per modificar els noms de la capçalera de columna d'aquest script, canalitzarem el fitxer Get-EventLog ordre a a Selecciona-Objecte comandament.

A continuació, creeu una taula hash de PowerShell dins de Selecciona-Objecte ordre que modifica els noms de les columnes. Aquí teniu el guió modificat que realitza la màgia.

|_+_|

El guió sembla molt més complex del que és realment. Tanmateix, si us centreu en la part de l'script després de Select-Object, serà fàcil detectar la diferència entre aquest script i la còpia anterior.

Concretament, he inclòs taules hash al fitxer Selecciona-Objecte bloc del codi. Cada hashtable personalitza la sortida del fitxer Get-EventLog comandament.

Aquí hi ha una mostra de la taula hash de Selecciona-Objecte bloc:

|_+_|

Com és habitual, la taula hash de PowerShell té dos elements. La clau és la Nom , el valor és el Expressió .

Una altra cosa important a tenir en compte és que al final de cada hashtable al Selecciona-Objecte bloc, hi ha una coma (,).

Finalment, aquí teniu el resultat de l'script final a PowerShell:

Abans em vaig comprometre a explicar per què em vaig presentar $EventLogReport variable per desar la sortida del bucle ForEach. Sense aquesta variable, el resultat final mostrarà 3 resultats individuals per a cadascun dels 3 registres d'esdeveniments. Tanmateix, emmagatzemant tots els resultats en una variable, vaig poder canalitzar aquesta variable a Format-Table: això mostra tot el resultat com una taula única. Aquí teniu l'ordre que va fer la màgia. |_+_|

Com exportar PowerShell Hashtable a CSV

Com exportar PowerShell Hashtable a CSV

En aquesta darrera secció, aprendràs a exportar una taula hash de PowerShell a CSV.

En el meu primer exemple d'aquesta secció, us mostraré com exportar aquest hashtabe a CSV.

|_+_|

Per exportar correctament aquesta taula hash de PowerShell a un fitxer CSV, heu d'utilitzar GetEnumerator Mètode (que s'ha comentat anteriorment) per enumerar els valors. En cas contrari, els parells clau/valor reals no s'exportaran.

Aquí teniu l'script modificat que exporta la taula hash desada al fitxer taula hash variable a un fitxer CSV.

|_+_|

A la introducció del guió a continuació:

|_+_|

El guió inclou el GetEnumerator Mètode a la taula hash. A continuació, canalitza la sortida a Selecciona-Objecte comandament.

Finalment, canalitzo la sortida del Selecciona-Objecte comanda al Exportar-Csv comandament. Per llegir més sobre com utilitzar-lo Exportar-Csv Cmdlet, llegiu la nostra guia - Powershell NoTypeInformation: aplicacions i exemples .

Quan executeu aquest script, es crea un fitxer CSV anomenat hashtable.csv , al camí que heu especificat. Vegeu la captura de pantalla següent per obtenir la sortida del fitxer CSV.

|_+_|

En el meu segon exemple, exportaré la sortida de l'script que hem creat a l'última secció, l'script de registre d'esdeveniments, a un fitxer CSV.

Aquí teniu el guió. Per exportar l'informe a CSV, he afegit el codi a sota d'aquest al final d'aquest script.

|_+_| |_+_|

El codi canalitza la sortida del fitxer Per cadascú bucle: guardat al Informe de registre d'esdeveniments variable – a la Ordre Export-Csv . El fitxer CSV generat es mostra a la captura de pantalla següent.

Això és tot: una guia completa sobre la taula hash de PowerShell! Espero que us hagi estat útil?

Si us ha semblat útil, voteu a la pregunta Va ser útil aquesta publicació a continuació.

Alternativament, podeu fer una pregunta, deixar un comentari o proporcionar més comentaris amb el formulari Deixa una resposta que es troba al final d'aquesta pàgina.

Finalment, per obtenir més zones S de tecnologia de PowerShell, visiteu la nostra pàgina de guia de instruccions de Windows PowerShell. També pot ser que la nostra pàgina de treball des d'inici sigui molt útil.

Referències i lectura addicional

  1. Tot el que volies saber sobre les taules hash
  2. Combina matrius i taules hash a PowerShell per diversió i benefici
  3. Sobre les taules hash