Guida definitiva di PowerShell Hashtable con esempi
Una tabella hash di PowerShell è una raccolta di elementi e i relativi valori. Gli oggetti sono indicati come chiavi. Inoltre, ogni chiave in una tabella hash ha un valore equivalente.
In sostanza, una tabella hash di PowerShell è una 'tabella' di un archivio chiave/valore.
In questa zona S, ti insegnerò tutto ciò che devi sapere sugli hashtable di PowerShell. La prima sezione esplora la differenza tra un Hashtable e un Array.
Quindi, nella seconda sezione, utilizzando il Get-Membro Cmdlet, ti porterò dietro il cofano di hashtables.
Infine, esplorerò diversi modi per utilizzare le tabelle hash negli script.
Sfoglia gli argomenti dei post
- Hashtable di PowerShell e array di PowerShell
- Metodi e proprietà di PowerShell Hashtable
- Come aggiungere o rimuovere elementi su una tabella hash esistente
- Come verificare se una tabella hash di PowerShell contiene una chiave
- Come convertire una tabella hash di PowerShell in una stringa
- Come utilizzare il metodo GetEnumerator di PowerShell Hashtable
- Come contare gli elementi di PowerShell Hashtable
- Come creare una tabella hash di PowerShell vuota e aggiungere chiavi
- Come creare una tabella hash PowerShell con più valori e una chiave
- Come eseguire l'iterazione di PowerShell Hashtable con ForEach Loop
- Come personalizzare un report con PowerShell Hashtable e Select-Object
- Come esportare la tabella hash di PowerShell in CSV
- Riferimenti e ulteriori letture
Hashtable di PowerShell e array di PowerShell
Prima di immergermi in Hashtables, voglio spiegare la differenza tra Hashtables e Arrays. Questa differenziazione è importante in quanto i due concetti possono facilmente confondersi.
Nell'introduzione a questa guida, ho spiegato che una tabella hash è un archivio chiave/valore. Inoltre, una tabella hash è come una tabella con chiavi e valori.
Al contrario, un array di PowerShell è una raccolta di valori o oggetti.
La differenza principale tra una tabella hash di PowerShell e una matrice di PowerShell è che una tabella hash è una raccolta di elementi (chiavi) e i relativi valori, mentre una matrice è solo un elenco di elementi.
Per un rapido esempio, i codici seguenti sono esempi di tabelle hash e array: il primo codice crea tabelle hash mentre il secondo codice crea una matrice:
|_+_| |_+_| Dagli esempi di codice, puoi vedere che mentre una tabella hash è racchiusa tra {}, un array è racchiuso tra ().Lo screenshot seguente mostra i risultati dei due codici.
La parte dello screenshot etichettata (1) è il risultato della tabella hash. Hai visto la coppia chiave/valore?
Nell'esempio sopra, la chiave Root ha un valore di C:UsersvictoDocuments. Inoltre, la chiave PSProvider ha un valore chiamato FileSystem.
cos'è ios?
Infine, Nome ha un valore di Documento.
Inoltre, la parte dello screenshot etichettata (2) ha il risultato del codice dell'array. Come spiegato in precedenza, è solo un elenco.
Metodi e proprietà di PowerShell Hashtable
Nell'introduzione ho promesso di portarti dietro il cofano di PowerShell Hashtables. Questo è!
In questa sezione, ti insegnerò come utilizzare il cmdlet Get-Member per guardare dietro le tabelle hash.
Quando esegui il pipe del risultato di una tabella hash di PowerShell a Get-Membro , potrai rivedere la disponibilità Metodi e Proprietà dell'Hashtable.
Torniamo al nostro primo esempio hastable sopra:
|_+_|Copia il codice in un nuovo documento PowerShell ISE. Quindi, esegui il codice.
Quindi, per vedere disponibile Metodi e Proprietà in questa tabella hash, esegui questo comando sullo stesso PowerShell ISE.
|_+_|Per eseguire il comando precedente, incollalo sotto l'ultimo codice. Quindi, evidenzialo e premi F8 o fai clic sull'icona evidenziata.
Il comando visualizzerà i risultati nel riquadro della console di PowerShell.
Per ora, guarda in cima al risultato. Ha TypeName: System.Collections.Hashtable.
Ciò conferma che gli oggetti inviati tramite pipe al cmdlet Get-Member sono Hashtable!
Nelle seguenti sottosezioni di questa sezione, ti mostrerò come usare i metodi e le proprietà comuni di una tabella hash di PowerShell.
Come aggiungere o rimuovere elementi su una tabella hash esistente
In questa sezione imparerai ad aggiungere nuovi elementi a una tabella hash di PowerShell esistente. Inoltre, imparerai anche come rimuovere un elemento da una tabella hash di PowerShell esistente.
Prima di approfondire, voglio menzionare che puoi anche creare una tabella hash vuota. Quindi, aggiungi chiavi/valori alla tabella hash – ne parleremo più avanti.
Torna all'aggiunta o alla rimozione di elementi negli hastable di PowerShell esistenti, quando abbiamo eseguito il $tabella hash | Get-Membro comando, uno dei metodi visualizzati nel risultato è Aggiungere . C'è anche un metodo Rimuovere .
Guarda le parti evidenziate dello screenshot qui sotto:
Prima di mostrarti come utilizzare questi due metodi, diamo un'occhiata al codice hashtable di PowerShell originale:
|_+_|La tabella hash ha 3 voci. In questo esempio, aggiungerò un'altra chiave chiamata Descrizione con il valore Mappe alla mia cartella 'Documenti'.
Per completare questa attività, eseguirò il comando seguente (sulla stessa console PowerShell ISE su cui ho eseguito i comandi precedenti)
|_+_| Nota come ho usato Aggiungi Metodo . Aggiungo un punto (.) accanto alla variabile che contiene la tabella hash. Poi, ho incluso il metodo, Aggiungere , seguito da (). Infine, ho incluso la nuova coppia chiave/valore che voglio aggiungere alla tabella hash.Una volta eseguito il comando, per confermare che la chiave aggiuntiva è stata aggiunta, evidenziare $ hashtable e premere F8.
|_+_|Ecco uno screenshot del risultato, a conferma dell'aggiunta della nuova chiave/valore.
come lasciare la discordia del canale vocale
Andando avanti, puoi utilizzare lo stesso approccio per rimuovere un valore da una tabella hash di PowerShell.
Per rimuovere l'ultima chiave che abbiamo aggiunto alla tabella hash, esegui un comando simile all'ultimo comando. Questa volta però sostituisci il Aggiungere Metodo con il Rimuovere Metodo.
Ecco il comando:
|_+_| Il Rimuovere Il metodo include solo il chiave . Non è necessario includere la chiave valore nel comando.Innanzitutto, esegui il comando sopra. Quindi, per confermare che la chiave è stata rimossa, evidenziare $ hashtable e premere F8.
|_+_|Il risultato del comando conferma che la chiave è stata rimossa!
Come verificare se una tabella hash di PowerShell contiene una chiave
Quando abbiamo condotto l'hastable di seguito al Get-Membro cmdlet, uno dei metodi visualizzati è il Contiene Chiave Metodo: guarda lo screenshot qui sotto.
|_+_|
Il Contiene Chiave Il metodo può essere utilizzato in tanti modi. Tuttavia, una delle applicazioni comuni di questo metodo consiste nell'utilizzarlo per verificare se esiste una chiave in una tabella hash e, in caso contrario, aggiungere la chiave.
Un'altra applicazione del Contiene Chiave Il metodo di una tabella hash di PowerShell consiste nell'usarla semplicemente per verificare se esiste un nome chiave nella tabella hash.
Per verificare se esiste una chiave in una tabella hash di PowerShell usando il file Contiene Chiave Metodo, eseguire il comando seguente:
|_+_|Questo comando controlla se esiste una chiave con il nome Descrizione nella tabella hash salvata nella variabile $hashtable. Il risultato del comando visualizza False.
Per verificare se la chiave Descrizione esiste prima di aggiungerla alla tabella hash di PowerShell, avremo bisogno di una riga di codici aggiuntiva al comando precedente.
Ecco il codice migliorato.
|_+_|Il codice usa l'istruzione condizionale IF per verificare se nella tabella hash esiste una chiave con il nome Descrizione.
Quindi, se il risultato è False, nella parte di esecuzione del comando dell'istruzione IF, utilizziamo il Aggiungere Metodo della tabella hash di PowerShell per aggiungere la chiave alla tabella hash.
Tuttavia, se la chiave esiste nella tabella hash, nella parte Else dell'istruzione IF, viene visualizzato un messaggio che informa la persona che ha eseguito il comando che la chiave esiste già.
Dopo aver eseguito l'ultimo comando, evidenziare il $ hashtable variabile ed eseguirlo da solo. Il risultato conferma che la chiave, Descrizione è stata aggiunta alla variabile perché non esisteva.
Per verificare se questo script funziona, eseguilo di nuovo...
|_+_|Questa volta, lo script non ha aggiunto la chiave. Piuttosto, ha restituito le informazioni nella parte Else dell'istruzione IF - La chiave esiste già nella tabella hash .
Come convertire una tabella hash di PowerShell in una stringa
Il primo passaggio per convertire una tabella hash di PowerShell in una stringa consiste nel restituire i valori delle chiavi nella tabella hash. In altre parole, converti la tabella hash di PowerShell in un array di PowerShell.
Per restituire i valori in una tabella hash, chiama il I valori proprietà della tabella hash.
Ecco il comando che restituisce i valori in una tabella hash:
|_+_|Dopo aver restituito i valori in una tabella hash di PowerShell, il passaggio successivo consiste nel reindirizzare $hashtable.Values a Out-String Comando…
|_+_| Più avanti in questa guida apprezzerai l'importanza di convertire una tabella hash di PowerShell in una stringa. Per vedere l'applicazione pratica di questo in uno script SysAdmin nel mondo reale, continua a leggere.Come utilizzare la tabella hash di PowerShell GetEnumerator Metodo
Un altro metodo importante di una tabella hash di PowerShell è il GetEnumerator Metodo.
È possibile utilizzare questo metodo per separare le chiavi in una tabella hash in singole stringhe. Ecco un esempio di comando di GetEnumerator Metodo di una tabella hash:
|_+_|Come puoi vedere dal risultato del comando precedente, le chiavi e i valori vengono restituiti in singole intestazioni. Non riesco a pensare a un'applicazione ora, tuttavia, se hai mai bisogno di suddividere le chiavi in una tabella hash di PowerShell, sai come farlo!
gamma di spaventapasseri di Stardew Valley
Come contare gli elementi di PowerShell Hashtable
C'è ancora un'altra utile proprietà hashtable, Contare . Come suggerisce il nome, questa proprietà restituisce il numero di chiavi in una tabella hash.
Come il I valori Property, per chiamare la Count Property, utilizzare un comando simile a quello seguente:
|_+_|Il comando conferma che la tabella hash, $hashtable ha 4 chiavi.
Come creare una tabella hash di PowerShell vuota e aggiungere chiavi
Finora, tutti gli esempi in questa zona S si sono concentrati sulla manipolazione dell'hashtable di PowerShell con le chiavi esistenti. In questa sezione imparerai come creare una tabella hash vuota.
Quindi, aggiungi le chiavi alla tabella hash.
Per creare una tabella hash di PowerShell vuota, inserisci semplicemente il file @ segno, seguito da {} parentesi. Ecco un esempio di una tabella hash vuota salvata in una variabile, Tabella hash vuota :
|_+_|Per confermare che la tabella hash è stata creata senza valori, eseguire il comando precedente. Quindi, esegui la variabile da sola.
|_+_|Il prossimo passo è usare il Aggiungere metodo, trattato in precedenza in questa guida, per aggiungere chiavi/valori alla tabella hash. In questo esempio, aggiungerò una chiave, chiamata Nome , con un valore di Documento .
Ecco il comando per eseguire questa attività.
|_+_|Infine, per confermare che i valori siano stati aggiunti correttamente, eseguire la variabile $Emptyhashtable:
|_+_|L'ultimo comando conferma che i valori sono stati aggiunti con successo:
Come creare una tabella hash PowerShell con più valori e una chiave
In tutti gli esempi trattati finora, la tabella hash di PowerShell ha una coppia chiave/valore. Tuttavia, ci sono circostanze in cui potrebbe essere necessario avere una singola chiave in una tabella hash con più valori.
In questo caso, vuoi effettivamente creare una tabella hash con matrici come valori.
Per iniziare, penso che sia meglio mostrarti i codici che ho usato per differenziare un hashtable da un array.
|_+_| |_+_|Quindi, per creare una tabella hash di PowerShell con chiavi singole e più valori, esegui uno script simile a questo:
|_+_|Nello script sopra, LogName è la chiave della tabella hash mentre i valori Sistema, Applicazione e Sicurezza sono assegnati alla chiave. In effetti, abbiamo creato una singola chiave hastable con più valori.
Per elencare i singoli valori in LogName chiave, eseguire il comando seguente:
|_+_|La parte dello screenshot sotto etichettata (1) è il risultato della tabella hash, $hashtableWithArrays . Inoltre, la porzione etichettata (2) mostra il risultato della $hashtableWithArrays.Values comando.
Se hai familiarità con i registri eventi di Windows, sistema, applicazione e sicurezza, sono i nomi dei registri eventi di Windows.
Nella prossima sezione, ti mostrerò come utilizzare il ciclo PowerShell ForEach per scorrere la tabella hash sopra ed eseguire il Get-EventLog comando su questi 3 registri eventi, utilizzando un unico script di PowerShell.
Come eseguire l'iterazione di PowerShell Hashtable con ForEach Loop
Nell'ultima sezione, ho creato una tabella hash PowerShell a chiave singola con più valori.
Per l'esempio in questa sezione, ho modificato la variabile in cui è stata archiviata la tabella hash LogNameChiavi . Ecco lo script aggiornato.
|_+_|In questa sezione ti insegnerò come usare Per ciascuno per scorrere i valori memorizzati in LogName chiave ed eseguire il Get-EventLog comando.
Per un rapido corso di aggiornamento su PowerShell ForEach, di seguito è riportata la sintassi generale di un comando PowerShell ForEach:
|_+_|Se applichi la sintassi di cui sopra al nostro LogNames hashtable, il comando aggiornato sarà simile a questo:
Le righe che iniziano con # sono commenti di PowerShell. |_+_|La prima parte dello script è lo stesso script che crea la tabella hash PowerShell a chiave singola con più valori. Ecco la sceneggiatura:
|_+_|Nella seconda parte dello script, ho convertito i valori memorizzati in ($LogNameKeys.Values) in stringhe e ho salvato il risultato in un'altra variabile, LogNameKeysAsStrings .
|_+_|Infine, nella terza parte dello script, viene introdotto il ciclo ForEach:
|_+_|In questa parte dello script, diciamo a PowerShell di prendere ogni valore archiviato in LogName chiave ( $LogNameKeysAsStrings ) – salva temporaneamente quel valore individuale nella variabile LogNameKey – quindi, utilizzare la variabile temporale per eseguire il Get-EventLog comando.
fortnite non è riuscito a bloccare il profiloHo incluso il Il più recente parametro del Get-EventLog comando con un valore di 5 in modo che il comando restituisca le ultime 5 voci di ogni registro eventi. Quando guardi uno script di PowerShell può sembrare complicato. Tuttavia, se guardi da vicino, di solito è molto facile.
Ora copia lo script seguente in un nuovo documento PowerShell ISE ed eseguilo.
Apri PowerShell ISE come amministratore. Se non apri PowerShell ISE come amministratore, riceverai messaggi di errore di accesso. |_+_|Lo screenshot seguente mostrava il risultato dello script. Sono presenti 15 righe nel riquadro dei risultati, che rappresentano 5 registri eventi di sistema, applicazione e sicurezza.
Come personalizzare un report con PowerShell Hashtable e Select-Object
Nell'ultima sezione, abbiamo creato uno script di PowerShell che estrae il rapporto del registro eventi di Windows. Ecco uno screenshot del rapporto
L'output predefinito dello script ha 5 colonne: Indice , Volta , Tipo di entrata , Fonte , ID istanza , e Messaggio . Se lo stai inviando come rapporto, potresti voler cambiare i nomi di queste colonne con nomi che saranno facilmente comprensibili.
Ecco lo script dell'ultima sezione.
Lo script è stato leggermente modificato. ora ho una variabile EventLogReport che salva l'output del ciclo ForEach. Spiegherò perché questo è necessario più avanti. |_+_|Per modificare i nomi delle intestazioni di colonna da questo script, eseguiremo il pipe Get-EventLog comando ad a Seleziona-Oggetto comando.
Quindi, crea una tabella hash di PowerShell all'interno di Seleziona-Oggetto comando che modifica i nomi delle colonne. Ecco lo script modificato che esegue la magia.
|_+_|La sceneggiatura appare molto più complessa di quanto non sia in realtà. Tuttavia, se ti concentri sulla parte dello script dopo Seleziona-Oggetto, sarà facile individuare la differenza tra questo script e la copia precedente.
In particolare, ho incluso le tabelle hash nel file Seleziona-Oggetto blocco del codice. Ogni tabella hash personalizza l'output di Get-EventLog comando.
Ecco un esempio di hashtable da Seleziona-Oggetto bloccare:
|_+_|Come al solito, la tabella hash di PowerShell ha due elementi. La chiave è il Nome , il valore è il Espressione .
Un'altra cosa importante da notare è che alla fine di ogni hashtable nel file Seleziona-Oggetto blocco, c'è una virgola (,).
Infine, ecco il risultato dello script finale in PowerShell:
In precedenza ho promesso di spiegare perché mi sono presentato $Report log eventi variabile per salvare l'output del ciclo ForEach. Senza questa variabile, il risultato finale visualizzerà 3 risultati individuali per ciascuno dei 3 registri eventi. Tuttavia, memorizzando tutti i risultati in una variabile, sono stato in grado di reindirizzare questa variabile in Format-Table: questo mostra l'intero risultato come una singola tabella. Ecco il comando che ha eseguito la magia. |_+_|Come esportare la tabella hash di PowerShell in CSV
In questa sezione finale imparerai come esportare una tabella hash di PowerShell in CSV.
Nel mio primo esempio per questa sezione, ti mostrerò come esportare questo hashtabe in CSV.
|_+_|Per esportare correttamente questa tabella hash di PowerShell in un file CSV, devi utilizzare il file GetEnumerator Metodo (discusso in precedenza) per elencare i valori. In caso contrario, le coppie chiave/valore effettive non verranno esportate.
Ecco lo script modificato che esporta la tabella hash salvata in hashtable variabile in un file CSV.
|_+_|In ha introdotto lo script di seguito:
|_+_|La sceneggiatura include il GetEnumerator Metodo nella tabella hash. Quindi reindirizza l'output a Seleziona-Oggetto comando.
Infine, convoglio l'output di Seleziona-Oggetto comando al Esporta-Csv comando. Per saperne di più su come utilizzare Esporta-Csv Cmdlet, leggi la nostra guida – Powershell NoTypeInformation: applicazioni ed esempi.
Quando esegui questo script, viene creato un file CSV chiamato hashtable.csv , nel percorso specificato. Vedi lo screenshot qui sotto per l'output del file CSV.
|_+_|
Nel mio secondo esempio, esporterò l'output dello script che abbiamo creato nell'ultima sezione, lo script del registro eventi, in un file CSV.
Ecco la sceneggiatura. Per esportare il rapporto in CSV, ho aggiunto il codice sotto questo alla fine di questo script.
|_+_| |_+_|Il codice reindirizza l'output di Per ciascuno loop – salvato nel EventLogReport variabile – al Comando Esporta-Csv . Il file CSV generato è mostrato nello screenshot qui sotto.
Ecco fatto: una guida completa sull'hashtable di PowerShell! Spero che tu l'abbia trovato utile?
Se l'hai trovato utile, vota gentilmente sì alla Domanda utile di questo post di seguito.
In alternativa, puoi fare una domanda, lasciare un commento o fornire più feedback con il modulo Lascia un commento che si trova alla fine di questa pagina.
Infine, per altre S Zone di PowerShell tech, visita la nostra pagina della guida di Windows PowerShell. Potresti anche trovare molto utile la nostra pagina Lavoro dalla home.


