Um Guia Inicial para Usar Hashtable no PowerShell

Ao se deparar com hashtables pela primeira vez, você pode se perguntar o que são e como desempenham um papel crucial em seus scripts ou comandos. Não se preocupe! Este tutorial vai te ajudar a começar a usar hashtables no PowerShell.

Em resumo, hashtables permitem que você armazene e manipule dados usando pares de chave-valor, que podem ser acessados de forma rápida e eficiente. E neste tutorial, você aprenderá o básico sobre hashtables e como usá-las em seus scripts e comandos do PowerShell.

Continue lendo e comece a expandir suas habilidades com hashtables no PowerShell!

Pré-requisitos

Este tutorial será uma demonstração prática. Para acompanhar, certifique-se de ter um sistema com o PowerShell v5+ instalado e configurado. Este tutorial utiliza o Windows 10 com o PowerShell 7, mas outras versões do PowerShell e do Windows também funcionarão.

Criando um Hashtable no PowerShell

Recuperar dados específicos pode se tornar uma situação de “agulha no palheiro” em algum momento. Mas com hashtables, você pode pesquisar rapidamente itens específicos em uma extensa coleção de dados.

No PowerShell, hashtables são estruturas de dados flexíveis usadas de várias maneiras, como armazenar dados de configuração, passar argumentos para cmdlets e armazenar dados em um script.

Para ver como um hashtable no PowerShell funciona, você primeiro terá que criar um da seguinte forma:

1. Abra uma sessão do PowerShell e execute o seguinte comando, que não produz saída, mas declara uma variável chamada name para referenciar uma hashtable vazia.

Como você pode ver abaixo, semelhante aos arrays no PowerShell, hashtables são definidas usando o símbolo @.

$name = @{}

2. Em seguida, execute o comando abaixo para verificar o tipo da variável name (GetType()).

$name.GetType()

O tipo da variável name é Hashtable, como mostrado abaixo. Essa informação confirma que sua hashtable foi criada com sucesso.

Verifying the newly-created hashtable

3. Após verificar sua hashtable, execute o seguinte código para verificar se a hashtable está vazia ou não.

O código abaixo determina se a propriedade Count é igual (-eq) a 0, e imprime uma mensagem correspondente.

# Compare se o valor da propriedade Count é igual (-eq) a 0
if ($name.Count -eq 0) {
	# Se sim, imprima a mensagem abaixo.
  Write-Output "The hashtable is empty."
} else {
	# Caso contrário, imprima a mensagem abaixo em vez disso.
  Write-Output "The hashtable is not empty."
}

Abaixo, você pode ver que a hashtable está vazia, pois você acabou de criá-la, e não há pares de chave-valor definidos nela.

Checking if the hashtable is empty or not

Adicionando Itens a uma Hashtable do PowerShell

Você acabou de criar uma hashtable praticamente vazia do PowerShell, que só será útil se você adicionar itens. Como? Adicionando pares de chave-valor à hashtable.

Similar a um array, mas em vez de usar inteiros como índices, uma hashtable do PowerShell usa chaves (que podem ser de qualquer tipo de dado) para identificar os valores. Esse recurso permite uma inserção, recuperação e exclusão rápidas de itens da hashtable, pois a chave localiza rapidamente o valor correspondente.

Abaixo está a sintaxe para adicionar um par de chave-valor a uma hashtable do PowerShell, onde:

  • $hashtable – O nome da hashtable.
  • $key – O nome da chave, que é insensível a maiúsculas e minúsculas. Por exemplo, “Nome” e “nome” seriam considerados a mesma chave em uma hashtable
  • $value – O valor a ser associado à chave.
$hashtable[$key] = $value

Execute o código a seguir, que não produz saída no console, mas declara pares de chave-valor e os adiciona à sua hashtable ($name).

Em uma hashtable, a chave permite que você execute uma função de hash, que mapeia a chave para uma localização específica na estrutura de dados interna da hashtable.

? Os valores da hashtable podem ser de qualquer tipo, como números, strings, arrays, objetos e outros tipos de dados como valores em uma hashtable.

# Declarar a chave Nome
$key = "FirstName"
# Declarar o valor da chave
$value = "John"
# Adicionar o item à hashtable
$name[$key] = $value

# Declarar a chave Sobrenome
$key = "LastName"
# Declarar o valor da chave
$value = "Doe"
# Adicionar o item à hashtable
$name[$key] = $value

Agora, execute o código abaixo para verificar se sua hashtable está vazia.

if ($name.Count -eq 0) {
  Write-Output "The hashtable is empty."
} else {
  Write-Output "The hashtable is not empty."
}

Como mostrado abaixo, você receberá uma mensagem dizendo que a hashtable não está vazia desta vez.

Checking if the hashtable is empty or not

Recuperando itens de uma Hashtable do PowerShell

Suponha que você esteja confiante de que sua hashtable não está vazia. Como saber quais itens existem em sua hashtable? Felizmente, você também pode recuperar itens de sua hashtable.

Execute o código abaixo para recuperar e exibir (Write-Output) todos os itens de sua hashtable em pares de chave-valor, um por linha.

# Itera por todos os pares de chave-valor na hashtable
foreach ($key in $name.Keys) {
	$value = $name[$key]
  # Exibe todos os pares de chave-valor na hashtable, um por linha.
	Write-Output "${key}: ${value}"
}
Retrieving items from a PowerShell hashtable

Agora, execute o código abaixo para recuperar e imprimir (Write-Output) todos os itens em uma hashtable no console.

? Observe que você frequentemente usará o seguinte código ao longo deste tutorial. Você pode evitar copiar e colar o mesmo código várias vezes, criando uma função, mas isso está fora do escopo deste tutorial.

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $name.GetEnumerator()
foreach ($element in $enumerator) {
	# Produz uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Desta vez, você pode ver indicações de quais são as chaves e valores entre os itens listados.

Retrieving items from a PowerShell hashtable, indicating which are the keys and value pairs

Criando Tabelas de Hash com Valores Predefinidos

Até agora, você só viu a criação de tabelas de hash vazias. Mas se você souber que certos valores serão sempre necessários em sua tabela, você pode criar uma com valores predefinidos.

Tabelas de hash com valores predefinidos podem economizar tempo e tornar seu código mais eficiente, pois você não precisa adicionar os valores à tabela posteriormente.

? Observe que a criação de tabelas de hash não produz saída. Mas não se preocupe. Neste tutorial, você verificará cada tabela de hash após a criação.

1. Execute o comando abaixo para criar uma tabela de hash ($hashtable1) com três pares chave-valor.

$hashtable1 = @{
  "Key1" = "Value1"
  "Key2" = "Value2"
  "Key3" = "Value3"
}

2. Em seguida, execute o seguinte código para verificar se a nova tabela de hash (hashtable1) existe.

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $hashtable1.GetEnumerator()
foreach ($element in $enumerator) {
  # Gera uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Você verá que os valores para cada par chave-valor são impressos na tela conforme esperado. Esta saída confirma que os valores predefinidos estão armazenados nos locais apropriados no hashtable.

Verifying that hashtable was created successfully with predefined values

3. Agora, execute o código abaixo para criar um hashtable ($hashtable2) com valores predefinidos usando um loop (ou uma matriz).

$keys = "Key1", "Key2", "Key3"
$values = "Value1", "Value2", "Value3"
$hashtable2 = @{}
for ($i = 0; $i -lt $keys.Count; $i++) {
  $hashtable2[$keys[$i]] = $values[$i]
}

4. Por fim, execute o código abaixo para verificar se o novo hashtable (hashtable2) foi criado com sucesso.

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $hashtable2.GetEnumerator()
foreach ($element in $enumerator) {
	# Gera uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

A saída abaixo confirma que o método de loop funciona ao criar um hashtable com valores predefinidos. Mas, como os itens são listados aleatoriamente, vá para a próxima seção para uma solução.

Verifying the new hashtable was created successfully

Criando uma Lista Ordenada de Itens em Hashtables

Por padrão, os itens em um hashtable são armazenados sem uma ordem específica. Mas e se você precisar de uma lista ordenada? Você também pode criar uma lista ordenada de itens em seus hashtables para organizar os dados em uma ordem específica.

Para criar uma lista ordenada de itens em seu hashtable, use o atributo [ordered] da seguinte forma:

1. Execute o seguinte código para criar uma lista [ordered] de itens em um hashtable ($hashtable3).

$hashtable3 = [ordered]@{
"Key1" = "Value3"
"Key2" = "Value2"
"Key3" = "Value1"
}

2. Em seguida, execute o seguinte código para verificar se a lista ordenada de hashtables foi criada com sucesso.

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Produz uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Conforme mostrado abaixo, os itens listados permanecem na ordem que você definiu quando criou o hashtable.

Alguns possíveis benefícios de usar um hashtable ordenado incluem, mas não estão limitados a, os seguintes:

Benefits Description
Easier to read and debug The elements are displayed in a predictable order, which can be especially useful if you work with many elements of a large hashtable.
Improved performance An ordered hashtable can be more efficient when accessing elements frequently in a specific order.
Verifying that the ordered list of hashtables has been created

3. Por fim, chame seu hashtable ordenado ($hashtable3) para confirmar ainda mais que você obterá uma lista ordenada de itens.

$hashtable3

A saída abaixo confirma que você ainda obterá uma lista ordenada de itens, independentemente de como acessar seu hashtable.

Verifying the list of items is still in an ordered format

Atualizando Itens Existentes em Hashtables

Os dados mudam constantemente e se você tiver hashtables existentes, atualizá-los é uma tarefa crucial. Por exemplo, você está usando um hashtable para armazenar valores de configuração. Se for o caso, talvez você precise atualizar o valor de uma chave se a configuração mudar.

Para atualizar um hashtable do PowerShell, o operador de atribuição = fará o truque da seguinte maneira:

1. Execute o comando abaixo, que não fornece saída, mas atualiza o valor da chave Key2 em $hashtable3 para NewValue2.

$hashtable3["Key2"] = "NewValue2"

Em seguida, execute o comando abaixo para Adicionar() um novo par chave-valor (Chave4 = NovoValor4) ao hashtable ($hashtable3).

Adicionar um novo par chave-valor não produz saída como a atualização de listas existentes nos hashtables, mas você verificará as mudanças no próximo passo.

$hashtable3.Add("Key4", "NewValue4")

3. Execute o seguinte código para verificar se os valores das chaves no seu hashtable ($hashtable3) foram atualizados.

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Produz uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}
Verifying the key values have been updated

? No PowerShell, cada chave em um hashtable deve ser única. Se você tentar adicionar um par chave-valor já existente no hashtable, você receberá um erro como o abaixo. Para evitar receber este erro, vá para o próximo passo.

Adding a key that already exists

4. Agora, execute o seguinte código, que utiliza o método Contains() para verificar se a chave que você tenta adicionar já existe no hashtable antes de adicionar o par chave-valor.

# Defina a variável para armazenar a nova chave
$newkey="Key5"
# Verifique se $nova_chave já existe no hashtable.
if (-not $hashtable3.Contains($newkey)) {
	# Se não, adicione o novo par chave-valor.
	$hashtable3.Add($newkey, "NewValue5")
	Write-Output "The new key '$newkey' has been added to the hashtable."
} else {
	# Se a chave existir, imprima uma mensagem.
	Write-Output "The key '$newkey' already exists."
}

Se a nova chave não existir, você receberá a mensagem abaixo, dizendo que a nova chave foi adicionada ao hashtable.

Checking if a key exists before adding it to the hashtable

Caso contrário, conforme mostrado abaixo, você receberá uma mensagem se a chave que está tentando já existir.

Adding a key that already exists

5. Por último, execute novamente o código abaixo para recuperar todos os itens em sua hashtable ($hashtable3).

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Produz uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Abaixo, você pode ver a chave recém-adicionada (Key5) e outros itens que você adicionou até agora à hashtable.

Checking all items listed in a hashtable

Removendo Itens de uma Hashtable

Muitos itens em uma hashtable, especialmente os desnecessários, podem apenas levar à confusão. Remover itens que não são mais relevantes ou necessários de sua hashtable fará um favor a você.

Suponha que sua hashtable contenha uma lista de usuários e suas informações. Se for o caso, remova os usuários de sua hashtable se eles não estiverem mais ativos.

Execute o código abaixo para remover um item específico (Key1) de sua hashtable ($hashtable3).

$key = "Key5"
if ($hashtable3.Contains($key)) {
  $hashtable3.Remove($key)
  Write-Output "The key-value pair with the key '$key' was removed from the hashtable."
} else {
  Write-Output "The key-value pair with the key '$key' was not found in the hashtable."
}

Abaixo, a saída imprime uma mensagem dizendo que a chave foi removida. Mas se a chave não existir, você receberá uma mensagem dizendo que a chave não foi encontrada.

Removing items from a hashtable

Agora, execute o código a seguir para verificar todos os itens em sua hashtable e verificar se a exclusão do item foi bem-sucedida.

# Obtenha um objeto que pode ser usado para iterar sobre os elementos de uma coleção.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Produz uma string que inclui a chave e o valor de cada elemento na coleção.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Abaixo, você pode verificar que o par chave-valor com a chave ‘Key5’ não existe mais no seu hashtable.

Verifying item deletion is successful

Conclusão

Com uma estrutura de par chave-valor e acesso rápido, um hashtable do PowerShell é adequado para gerenciar grandes quantidades de dados em várias situações. E neste tutorial, você aprendeu como criar, adicionar, atualizar e remover itens de hashtables. Tudo isso lhe proporciona as habilidades para usar hashtables de forma eficaz em seus scripts.

Que tal levar suas habilidades recém-adquiridas para o próximo nível? Considere incorporar hashtables em seus scripts para tarefas mais avançadas, como manipulação de dados e transformação. Ou experimente combinar hashtables com outros dados estruturas no PowerShell, como arrays e objetos, para resolver problemas mais complexos?

Source:
https://adamtheautomator.com/powershell-hashtable/