ARGOMENTO about_Hash_Tables DESCRIZIONE BREVE Descrive come creare, utilizzare e ordinare le tabelle hash in Windows PowerShell. DESCRIZIONE DETTAGLIATA Una tabella hash, anche nota come dizionario o matrice associativa, è una struttura dei dati compatta in cui sono archiviate una o più coppie nome/valore. Una tabella hash potrebbe ad esempio contenere una serie di nomi e ID dipendente, nomi di computer e indirizzi IP oppure ID messaggio e testo di messaggi. Le tabelle hash vengono utilizzate con frequenza perché possono rivelarsi strumenti molto efficienti per la ricerca e il recupero di dati. È possibile utilizzare le tabelle hash per archiviare elenchi e creare proprietà calcolate in Windows PowerShell e in Windows PowerShell è disponibile il cmdlet ConvertFrom-StringData che converte le stringhe in tabelle hash. Creazione di tabelle hash Gli elementi di una tabella hash sono disposti in coppie nome/valore, ad esempio: Msg1="Immettere la password." Msg2="Il parametro path è obbligatorio." Msg3="L'alias di Get-Command è gcm." I valori vengono mappati o associati ai nomi in modo che quando si invia il nome, venga restituito il relativo valore. Di seguito viene illustrata la sintassi di una tabella hash in Windows PowerShell: @{ <nome> = <valore>; [<nome> = <valore> ] ...} Quando si crea una tabella hash, attenersi alle istruzioni seguenti: - Iniziare la tabella hash con il carattere chiocciola (@). - Racchiudere la tabella hash tra parentesi graffe ({}). - Immettere una o più coppie nome/valore per il contenuto della tabella hash. - Utilizzare un segno di uguale (=) per separare ogni nome dal relativo valore. - Utilizzare un punto e virgola (;) per separare le coppie nome/valore. - Se un nome o un valore contiene degli spazi, racchiuderlo tra virgolette. Ad esempio, una tabella hash dei messaggi utente precedenti è simile alla seguente: @{ Msg1="Immettere la password."; Msg2="Il parametro path è obbligatorio."; Msg3="L'alias di Get-Command è gcm."; } Per utilizzare una tabella hash in script e comandi, salvarla in una variabile. Il valore della variabile è un oggetto tabella hash (System.Collections.Hashtable) e ogni nome nelle coppie nome/valore è una proprietà dell'oggetto tabella hash. I comandi seguenti salvano la tabella hash del messaggio utente in una variabile $a e utilizzano il metodo con punto per visualizzare i valori. C:\PS> $a = @{ >> Msg1="Immettere la password."; >> Msg2="Il parametro path è obbligatorio."; >> Msg3="L'alias di Get-Command è gcm."; >> } C:\PS> $a Nome Valore ---- ----- Msg1 Immettere la password. Msg3 L'alias di Get-Command è gcm. Msg2 Il parametro path è obbligatorio. C:\PS> $a.Msg1 Immettere la password. Le tabelle hash non sono limitate a un tipo di dati. È possibile immettere qualsiasi tipo di dati in una tabella hash e combinare più tipi di dati in una sola tabella hash. Ad esempio, è possibile creare una tabella hash contenente un valore intero, una chiamata a un cmdlet e una stringa. Ordinamento di tabelle hash Per disporre in ordine alfabetico la tabella hash in base alle chiavi o ai valori, utilizzare il metodo GetEnumerator delle tabelle hash per ottenere le chiavi e i valori nella tabella hash, quindi utilizzare il cmdlet Sort-Object per ordinarle. Ad esempio, il comando seguente dispone la tabella hash in $a in ordine alfabetico in base alle chiavi. C:\PS> $a.getenumerator() | sort-object -property key Nome Valore ---- ----- Msg1 Immettere la password. Msg2 Il parametro path è obbligatorio. Msg3 L'alias di Get-Command è gcm. Il comando seguente utilizza lo stesso metodo per ordinare i valori hash in ordine decrescente. C:\PS> $a.getenumerator() | sort-object -property value -descending Nome Valore ---- ----- Msg2 Il parametro path è obbligatorio. Msg3 L'alias di Get-Command è gcm. Msg1 Immettere la password. ConvertFrom-StringData Il cmdlet ConvertFrom-StringData converte una stringa o una stringa here di coppie name/value in una tabella hash. È possibile utilizzare in modo sicuro il cmdlet ConvertFrom-StringData nella sezione Dati di uno script e con il cmdlet Import-LocalizedData per visualizzare i messaggi utente nelle impostazioni cultura dell'interfaccia utente dell'utente corrente. Le stringhe here sono particolarmente utili quando i valori nella tabella hash includono virgolette. Per ulteriori informazioni sulle stringhe here, vedere about_Quoting_Rules. Nell'esempio seguente viene illustrato come creare una stringa here dei messaggi utente dell'esempio precedente e come utilizzare ConvertFrom-StringData per convertirli da stringa a tabella hash. Il comando seguente crea una stringa here delle coppie nome/valore, quindi lo salva nella variabile $string. C:\PS> $string = @" Msg1="Immettere la password." Msg2="Il parametro path è obbligatorio." Msg3="L'alias di Get-Command è gcm." "@ Questo comando utilizza il cmdlet ConvertFrom-StringData per convertire la stringa here in una tabella hash. C:\PS> convertfrom-stringdata $string Nome Valore ---- ----- Msg3 "L'alias di Get-Command è gcm." Msg2 "Il parametro path è obbligatorio." Msg1 "Immettere la password." VEDERE ANCHE about_Arrays about_Quoting_Rules about_Script_Internationalization ConvertFrom-StringData Import-LocalizedData