PowerShell: obtenga valor por clave en HashTable [11 formas]
Obtener un valor único mediante una sola clave
Podemos obtener un valor único mediante una única clave en una tabla hash usando las siguientes formas en PowerShell:
- Notación del indexador
.Item() Método - Notación de puntos
- Cmdlet
Dónde-Objeto
Usar notación indexadora
Utilice la notación indexadora representada con corchetes ([]) para obtener un valor por clave en HashTable en PowerShell.
Utilice notación indexadora:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$value = $hashTable['Name']
Write-Output $valuePRODUCCIÓN :
PowerShell
Creamos una tabla hash con dos pares clave-valor, Name con PowerShell y Version con 7.3, y guardamos en $hashTable. Luego, usamos la notación indexadora ([]) especificando la clave para obtener su valor, que guardamos en la variable $value. Finalmente, utilizamos el cmdlet Write-Output para mostrar el valor de la variable $value en la consola.
También podemos usar el cmdlet Write-Output para escribir los objetos dados en la canalización. Si este cmdlet es el único comando o el último comando en la canalización, los objetos se mostrarán en la consola. Envía objetos al canal principal, el flujo de salida, también conocido como canal de éxito; Normalmente usamos este cmdlet para mostrar objetos y cadenas en la consola.
Utilice el método .Item()
Utilice el método .Item() para obtener un valor por clave en la tabla hash.
Utilice el método .Item():
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$value = $hashTable.Item('Name')
Write-Output $valuePRODUCCIÓN :
PowerShellEste ejemplo de código utiliza la misma tabla hash que el código anterior. Aquí, utilizamos el método .Item(), que tomó una clave como argumento y devolvió el valor respectivo que almacenamos en la variable $value.
Este $value se usó más tarde para imprimir su valor en la consola usando el cmdlet Write-Output. Usar .Item() no es un enfoque diferente sino una alternativa conveniente a la notación indexadora.
Usar notación de puntos
Utilice la notación de puntos representada con . para obtener un valor por clave en la tabla hash.
Utilice notación de puntos:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$value = $hashTable.Name
Write-Output $valuePRODUCCIÓN :
PowerShell
El ejemplo anterior también es similar a los dos últimos fragmentos de código, ya que utiliza la misma tabla hash y escribe el valor recuperado mediante el cmdlet Write-Output. La única diferencia es que usamos notación de puntos para acceder al valor de la clave especificada.
Utilice el cmdlet Where-Object
Utilice el cmdlet Where-Object para obtener un valor por clave en la tabla hash.
Utilice el cmdlet Where-Object:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$hashTable.GetEnumerator() | Where-Object {$_.Key -eq 'Name'}PRODUCCIÓN :
Name Value
---- -----
Name PowerShellPara este código, usamos el método GetEnumerator() para obtener un enumerador para $hashTable, que se usó para iterar sobre los pares clave-valor de la tabla hash. Luego, el enumerador se canalizó al cmdlet Where-Object, que filtró la tabla hash según la condición especificada $_.Key -eq 'Name' para devolver solo el pares clave-valor donde la clave es igual a 'Name'. Recuerde, -eq es el operador que no distingue entre mayúsculas y minúsculas.
Devolvió un objeto que contiene el par clave-valor para la clave 'Name' con el valor 'PowerShell' (consulte el resultado anterior). Podemos usar la solución anterior cuando queramos filtrar los pares clave-valor de una tabla hash en función de una clave específica. Si solo está interesado en el valor, puede utilizar la propiedad .Value como se indica a continuación.
Utilice el cmdlet Where-Object:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
($hashTable.GetEnumerator() | Where-Object {$_.Key -eq "Name"}).ValuePRODUCCIÓN :
PowerShellObtener múltiples valores mediante múltiples claves
Podemos utilizar los siguientes enfoques diferentes en PowerShell para obtener múltiples valores mediante múltiples claves en la tabla hash:
- Operador
-match - Cmdlet
ForEach-Object - Conjunto de claves
Utilice el operador -match
Utilice el operador -match para obtener múltiples valores mediante múltiples claves de una tabla hash en PowerShell.
Utilice el operador -match:
$hashTable = @{
'FirstName' = 'John'
'LastName' = 'Williamson'
'Course' = 'PowerShell'
}
$hashTable.GetEnumerator() | Where-Object {$_.Key -match 'Name'}PRODUCCIÓN :
Name Value
---- -----
FirstName John
LastName WilliamsonEste ejemplo de código es el mismo en el que usamos el operador -eq para obtener un valor mediante una clave, pero reemplazamos el -eq con el - operador match para filtrar varias claves que coincidan con el patrón Name. Tenga en cuenta que el operador -match no distingue entre mayúsculas y minúsculas, lo que significa que Name, name y NAmE son todos iguales. .
Utilice el cmdlet ForEach-Object
Utilice el cmdlet ForEach-Object para obtener varios valores mediante varias claves en la tabla hash mediante PowerShell.
Utilice el cmdlet ForEach-Object:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
'OS' = 'Windows'
}
$hashTable.GetEnumerator() | ForEach-Object {
if ($_.Key -eq 'Version') {
Write-Output $_.Value
}
if ($_.Key -eq 'OS') {
Write-Output $_.Value
}
}PRODUCCIÓN :
7.3
WindowsNuevamente, creamos una tabla hash que tiene tres pares clave-valor. A continuación, utilizamos el método GetEnumerator() para obtener un objeto enumerador para iterar sobre cada par clave-valor de $hashTable.
Luego, este enumerador se canalizó con el cmdlet ForEach-Object para recorrer los pares clave-valor y, dentro del bloque de script (representado con {}), verificó si el La clave es igual a 'Version' o 'OS' usando el operador -eq.
Si es True, escribe el valor de la clave especificada utilizando el cmdlet Write-Output. Esta solución puede resultar útil cuando desea filtrar pares clave-valor específicos de una tabla hash y generar sus valores. Sin embargo, tenga en cuenta que ForEach-Object recorrerá en iteración todos los pares clave-valor; Si tiene una tabla hash grande, esta puede ser una operación costosa en términos de rendimiento.
Usar conjunto de claves
Utilice una matriz de claves para obtener múltiples valores mediante múltiples claves en la tabla hash.
Utilice una matriz de claves:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
}
$keys = @('Name','Version')
$values = $hashTable[$keys]
Write-Output $valuesPRODUCCIÓN :
PowerShell
7.3Aquí, utilizamos un operador de matriz representado con @() para crear una matriz que contenga claves ('Name' y 'Version') como matriz. elementos. Luego, guardamos esta matriz en la variable $keys, pasada en notación indexadora ([]) para obtener una matriz de valores, que guardamos en $valores matriz para su uso posterior.
NOTA: No es obligatorio utilizar el operador de matriz para crear una matriz, pero puedes hacerlo usando $keys=('Name', 'Version') o $keys='Nombre', 'Versión' también.
Obtener todos los valores con/sin claves
Podemos utilizar los siguientes enfoques en PowerShell para obtener todos los valores con/sin claves en la tabla hash:
- Bucle
ParaCada - Cmdlet
Dónde-Objeto
Utilice el bucle ForEach
Utilice el bucle ForEach para obtener todos los valores con las claves respectivas de una tabla hash en PowerShell.
Utilice para cada bucle:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
'OS' = 'Windows'
}
ForEach($key in $hashTable.Keys){
$message = '{0} = {1}' -f $key, $hashTable[$key]
Write-Output $message
}PRODUCCIÓN :
Name = PowerShell
Version = 7.3
OS = WindowsAquí, utilizamos la instrucción ForEach, también conocida como bucle ForEach para recorrer una colección de todas las claves devueltas por $hashTable.Keys.
Para cada clave, creamos una cadena en el formato "key=value" usando el operador de formato de cadena (-f), donde "key" era la clave actual en el bucle y "value" era el valor asociado con esa clave en la tabla hash. Luego usamos el cmdlet Write-Output para enviar el mensaje a la consola.
Tenga en cuenta que hay formularios más compactos que nos dan los mismos resultados con un encabezado para una comprensión clara. Para eso podemos usar lo siguiente:
Imprimir tabla hash completa:
$hashTablePRODUCCIÓN :
Name Value
---- -----
Name PowerShell
Version 7.3
OS WindowsO
Imprimir tabla hash completa:
$hashTable.GetEnumerator()PRODUCCIÓN :
Name Value
---- -----
Name PowerShell
Version 7.3
OS WindowsUtilice el cmdlet Where-Object
Utilice el cmdlet Where-Object para obtener todos los valores sin claves de una tabla hash en PowerShell. Este enfoque es útil cuando queremos obtener todos los valores en forma de objeto.
Utilice el cmdlet Where-Object:
$hashTable = @{
'Name' = 'PowerShell'
'Version' = 7.3
'OS' = 'Windows'
}
$hashTable.PSObject.Properties | Where-Object {$_.Name -eq "Values"} | Select ValuePRODUCCIÓN :
Value
-----
{PowerShell, 7.3, Windows}Después de crear una tabla hash con tres pares clave-valor, accedió a la propiedad PSObject del objeto $hashTable y su colección Properties. Luego, se canaliza a Where-Object para filtrar la colección de propiedades por el nombre de propiedad 'Values' y luego selecciona la propiedad Value del objeto filtrado. Para comprender el comando anterior, mire la siguiente captura de pantalla.
Alternativamente, podemos usar $hashTable.Values para obtener valores únicamente; Este comando es más sencillo.
Hasta este punto, hemos aprendido cómo obtener un valor por una clave, múltiples claves por múltiples valores y todos los valores con y sin claves de una tabla hash; ¿Qué pasa si debemos obtener valores de una tabla hash que contiene claves anidadas? Veamos cómo podemos abordarlo.
Obtener el valor anidado de la clave anidada
Podemos usar las siguientes formas en PowerShell para obtener el valor anidado de las claves anidadas en la tabla hash:
- Notación del indexador
- Función definida por el usuario
Usar notación indexadora
Utilice la notación indexadora para obtener un valor de una clave anidada en la tabla hash mediante PowerShell.
Utilice notación indexadora:
$hashtable = @{
'StudentID' = 11239
'Name' = @{
'FirstName' = 'John'
'LastName' = 'Williamson'
}
}
$value = $hashtable['Name']['FirstName']
Write-Output $valuePRODUCCIÓN :
JohnYa aprendimos sobre la notación del indexador en el primer método de este artículo. Para el código anterior, lo usamos con claves anidadas, lo que significa que primero ubicó la clave 'Name', luego en la clave 'Name', ubicó el 'FirstName' para recuperar el valor. Podemos agregar más notaciones de indexador para profundizar más. Por ejemplo:
Utilice notación indexadora:
$hashtable = @{
'StudentID' = 11239
'Addresses' = @{
'permanentAddress' = @{
'City' = 'Lahore'
'Country' = 'Pakistan'
}
'temporaryAddress' = @{
'City' = 'Multan'
'Country' = 'Pakistan'
}
}
}
$hashtable['Addresses']['permanentAddress']['City']
$hashtable['Addresses']['temporaryAddress']['City']PRODUCCIÓN :
Lahore
MultanUsar función definida por el usuario
Para obtener un valor mediante una clave en la tabla hash usando PowerShell:
- Cree una función llamada
GetValueByKeypara buscar el valor de la clave incluso si el valor es de una tabla hash anidada. - Crea una tabla hash.
- Llame a la función creada en el primer paso pasando dos argumentos; el primero es el objeto de la tabla hash y el segundo es la clave para la que desea recuperar una clave.
Utilice la función definida por el usuario:
function GetValueByKey {
param (
[hashTable] $hashTable,
[string] $key
)
$hashTable.GetEnumerator() | ForEach-Object {
if ($_.Key -eq $key) {
Write-Output $_.Value
}
elseif ($_.Value -is [hashTable]) {
Get-ValueByKey $_.Value $key
}
}
}
$hashTable = @{'Name' = 'PowerShell'; 'Version' = 7.3; 'OS' = 'Windows'}
GetValueByKey $hashTable 'Name'PRODUCCIÓN :
PowerShellPara este enfoque, creamos una función llamada GetValueByKey que tomó dos parámetros:
$hashTable- un objeto de tabla hash$key: un valor de cadena que representa la clave a buscar en la tabla hash
Luego, la función utilizó el método GetEnumerator() del objeto de la tabla hash para iterar a través de cada par clave-valor en la tabla hash. Para cada par, verificó si la clave era igual a la clave buscada y, de ser así, escribió el valor correspondiente en la salida usando el cmdlet Write-Output.
Si el valor de la clave es una tabla hash, la función se llamará a sí misma de forma recursiva y pasará la tabla hash anidada y la clave de búsqueda como argumentos. Esto también permitió que la función buscara la clave en tablas hash anidadas. Esta función buscará el valor de la clave incluso si el valor es de una tabla hash anidada.
Vale la pena señalar que la función generará todos los valores clave coincidentes que encuentre en la tabla hash de entrada y su tabla hash anidada. Si desea solo el primer valor clave coincidente, puede reemplazar el cmdlet Write-Output con una instrucción return.
Se trata de cómo obtener valor por clave en PowerShell.

