Guia do PowerShell Hashtable Ultimate com exemplos

20 de maio de 2021 5546 Visualizações PowerShell Hashtable Seu guia definitivo com exemplos

Uma tabela de hash do PowerShell é uma coleção de itens e seus valores. Os itens são chamados de chaves. Além disso, cada chave em uma tabela de hash tem um valor equivalente.





Em essência, uma tabela de hash do PowerShell é uma 'tabela' de armazenamento de chave/valor.



Nesta Zona S, ensinarei tudo o que você precisa saber sobre as tabelas de hash do PowerShell. A primeira seção explora a diferença entre um Hashtable e um Array.

Então, na segunda seção, usando o Get-Membro Cmdlet, vou levá-lo para trás do capô das tabelas de hash.



Por fim, explorarei diferentes maneiras de usar hashtables em scripts.



Procurar tópicos de postagem

Tabela de hash do PowerShell vs matriz do PowerShell

Tabela de hash do PowerShell vs matriz do PowerShell

Antes de mergulhar em Hashtables, quero explicar a diferença entre Hashtables e Arrays. Essa diferenciação é importante, pois os dois conceitos podem facilmente se confundir.



Na introdução deste guia, expliquei que uma tabela de hash é um armazenamento de chave/valor. Além disso, uma tabela de hash é como uma tabela com chaves e valores.



Pelo contrário, um PowerShell Array é uma coleção de valores ou objetos.

A principal diferença entre uma tabela de hash do PowerShell e uma matriz do PowerShell é que uma tabela de hash é uma coleção de itens (chaves) e seus valores – enquanto uma matriz é apenas uma lista de itens.

Para um exemplo rápido, os códigos abaixo são exemplos de hashtables e um array – o primeiro código cria um hashtables enquanto o segundo código cria um array:

|_+_| |_+_| Nos exemplos de código, você pode ver que, enquanto uma tabela de hash está entre {}, uma matriz está entre ().

A captura de tela abaixo exibe os resultados dos dois códigos.

Tabela de hash do PowerShell vs matriz do PowerShell

A parte da captura de tela rotulada (1) é o resultado da tabela de hash. Você já viu o par chave/valor?

No exemplo acima, a chave Root tem um valor de C:UsersvictoDocuments. Além disso, a chave PSProvider tem um valor chamado FileSystem.

Finalmente, Name tem um valor de Document.

Além disso, a parte da captura de tela rotulada (2) tem o resultado do código da matriz. Como explicado anteriormente, é apenas uma lista.

Métodos e propriedades da tabela de hash do PowerShell

Métodos e propriedades da tabela de hash do PowerShell

Na introdução, prometi levá-lo aos bastidores do PowerShell Hashtables. É isso!

Nesta seção, vou ensiná-lo a usar o cmdlet Get-Member para olhar por trás de tabelas de hash.

Quando você canaliza o resultado de uma tabela de hash do PowerShell para Get-Membro , você poderá revisar os Métodos e Propriedades da tabela de hash.

Vamos voltar ao nosso primeiro exemplo acelerável acima:

|_+_|

Copie o código em um novo documento ISE do PowerShell. Em seguida, execute o código.

Então, para ver disponível Métodos e Propriedades nesta tabela de hash, execute este comando no mesmo PowerShell ISE.

|_+_|

Para executar o comando acima, cole-o abaixo do último código. Em seguida, destaque-o e pressione F8 ou clique no ícone destacado.

Métodos e propriedades da tabela de hash do PowerShell

O comando exibirá os resultados no painel do console do PowerShell.

Por enquanto, olhe em cima do resultado. Tem TypeName: System.Collections.Hashtable.

Isso confirma que os objetos canalizados para o cmdlet Get-Member são uma tabela de hash!

Nas seguintes subseções desta seção, mostrarei como usar os métodos e propriedades comuns de uma tabela de hash do PowerShell.

Como adicionar ou remover itens de uma tabela de hash existente

Nesta seção, você aprenderá a adicionar novos itens a uma tabela de hash do PowerShell existente. Além disso, você também aprenderá a remover um item de uma tabela de hash do PowerShell existente.

Antes de mergulhar nisso, quero mencionar que você também pode criar uma tabela de hash vazia. Em seguida, adicione chaves/valores à tabela de hash – mais sobre isso a seguir.

Voltar para adicionar ou remover itens de hastables existentes do PowerShell – quando executamos o $hashtable | Get-Membro comando, um dos métodos exibidos no resultado é Adicionar . Existe também um método Remover .

Veja as partes destacadas da captura de tela abaixo:

Métodos e propriedades da tabela de hash do PowerShell

Antes de mostrar como usar esses dois métodos, vamos ver o código hashtable original do PowerShell:

|_+_|

A tabela de hash tem 3 entradas. Neste exemplo, adicionarei outra chave chamada Description com o valor Maps à minha pasta ‘Meus Documentos’.

aumentar o espaço de armazenamento offline html5

Para concluir esta tarefa, executarei o comando abaixo (no mesmo console do PowerShell ISE que executei os comandos anteriores)

|_+_| Observe como eu usei o Add Método . Eu adiciono um ponto (.) ao lado da variável que contém a tabela de hash. Então, eu incluí o método, Adicionar , Seguido por (). Por fim, incluí o novo par chave/valor que desejo adicionar à tabela de hash.

Depois de executar o comando, para confirmar que a chave adicional foi adicionada, realce $ tabela de hash e pressione F8.

|_+_|

Aqui está uma captura de tela do resultado - confirmando que a nova chave/valor foi adicionada.

Seguindo em frente, você pode usar a mesma abordagem para remover um valor de uma tabela de hash do PowerShell.

Para remover a última chave que adicionamos à tabela de hash, execute um comando semelhante ao último comando. Desta vez, porém, substitua o Adicionar Método com o Remover Método.

Aqui está o comando:

|_+_| O Remover O método inclui apenas o chave . Você não precisa incluir a chave valor no comando.

Primeiro, execute o comando acima. Em seguida, para confirmar que a chave foi removida, realce $ tabela de hash e pressione F8.

|_+_|

O resultado do comando confirma que a chave foi removida!

Métodos e propriedades da tabela de hash do PowerShell - Como adicionar ou remover itens à tabela de hash existente

Como verificar se uma tabela de hash do PowerShell contém uma chave

Quando canalizamos o hastable abaixo para o Get-Membro Cmdlet, um dos métodos exibidos é o ContémChave Método – veja a captura de tela abaixo.

|_+_|

O ContémChave O método pode ser usado de muitas maneiras. No entanto, uma das aplicações comuns desse método é usá-lo para verificar se existe uma chave em uma tabela de hash e, se não existir, adicionar a chave.

Outra aplicação do ContémChave O método de uma tabela de hash do PowerShell é simplesmente usá-la para verificar se existe um nome de chave na tabela de hash.

Para verificar se existe uma chave em uma tabela de hash do PowerShell usando o ContémChave Método, execute o comando abaixo:

|_+_|

Este comando verifica se existe uma chave com o nome Descrição na tabela de hash salva na variável $hashtable. O resultado do comando exibe False.

Métodos e propriedades da tabela de hash do PowerShell - Como verificar se uma tabela de hash do PowerShell contém uma chave

Para verificar se a chave Description existe antes de adicioná-la à tabela de hash do PowerShell, precisaremos de uma linha de códigos adicional ao comando anterior.

Aqui está o código melhorado.

|_+_|

O código usa a instrução condicional IF para verificar se uma chave com o nome Descrição existe na tabela de hash.

Então, se o resultado for False, na parte de execução do comando da instrução IF, usamos o Adicionar Método da tabela de hash do PowerShell para adicionar a chave à tabela de hash.

No entanto, se a chave existir na tabela de hash, na parte Else da instrução IF, exibiremos uma mensagem informando à pessoa que executou o comando que a chave já existe.

Depois de executar o último comando, destaque o $ tabela de hash variável e executá-lo sozinho. O resultado confirma que a chave Descrição foi adicionada à variável porque ela não existia.

Para testar se este script funciona – execute-o novamente…

|_+_|

Desta vez, o script não adicionou a chave. Em vez disso, ele retornou as informações na parte Else da instrução IF – A chave já existe na tabela de hash .

Métodos e propriedades da tabela de hash do PowerShell - Como verificar se uma tabela de hash do PowerShell contém uma chave

Como converter uma tabela de hash do PowerShell em string

A primeira etapa para converter uma tabela de hash do PowerShell em uma string é retornar os valores das chaves na tabela de hash. Em outras palavras, você converte a tabela de hash do PowerShell em uma matriz do PowerShell.

Para retornar os valores em uma tabela de hash, chame o método Valores propriedade da tabela de hash.

Aqui está o comando que retorna os valores em uma tabela de hash:

pânico lua não corrige memória suficiente
|_+_|

Depois de retornar os valores em uma tabela de hash do PowerShell, a próxima etapa é canalizar $hashtable.Values ​​para o Out-String Comando…

|_+_| Mais adiante neste guia, você apreciará a importância de converter uma tabela de hash do PowerShell em uma string. Para ver a aplicação prática disso em um script SysAdmin do mundo real, continue lendo.

Como usar a tabela de hash do PowerShell GetEnumerator Método

Outro método importante de uma tabela de hash do PowerShell é o GetEnumerator Método.

Você pode usar este método para separar as chaves em uma tabela de hash em strings individuais. Aqui está um exemplo de comando do GetEnumerator Método de uma tabela de hash:

|_+_|

Como você pode ver no resultado do comando acima, as chaves e os valores são retornados em cabeçalhos individuais. Não consigo pensar em um aplicativo agora, no entanto, se você precisar dividir as chaves em uma tabela de hash do PowerShell, você sabe como fazê-lo!

Como contar itens da tabela de hash do PowerShell

Há ainda outra propriedade hashtable útil, Contar . Como o nome indica, esta propriedade retorna o número de chaves em uma tabela de hash.

Como o Valores Property, para chamar a propriedade Count, use um comando semelhante ao abaixo:

|_+_|

O comando confirma que a tabela de hash $hashtable tem 4 chaves.

Como contar itens da tabela de hash do PowerShell

Como criar uma tabela hash vazia do PowerShell e adicionar chaves

Como criar uma tabela hash vazia do PowerShell e adicionar chaves

Até agora, todos os exemplos nesta Zona S se concentraram na manipulação da tabela de hash do PowerShell com as chaves existentes. Nesta seção, você aprenderá como criar uma tabela de hash vazia.

Em seguida, adicione chaves à tabela de hash.

Para criar uma tabela de hash vazia do PowerShell, basta inserir o @ sinal, seguido de {} colchetes. Aqui está um exemplo de uma tabela de hash vazia salva em uma variável, Emptyhashtable :

|_+_|

Para confirmar que a tabela de hash foi criada sem valores, execute o comando anterior. Em seguida, execute a variável por conta própria.

|_+_|

O próximo passo é usar o Adicionar método, abordado anteriormente neste guia, para adicionar chaves/valores à tabela de hash. Neste exemplo, adicionarei uma chave, chamada Nome , com valor de Documento .

Aqui está o comando para executar esta tarefa.

|_+_|

Por fim, para confirmar que os valores foram adicionados com sucesso, execute a variável $Emptyhashtable:

|_+_|

O último comando confirma que os valores foram adicionados com sucesso:

Como criar uma tabela de hash do PowerShell com vários valores e uma chave

Como criar uma tabela de hash do PowerShell com vários valores e uma chave

Em todos os exemplos que abordamos até agora, a tabela de hash do PowerShell tem um par chave/valor. No entanto, há circunstâncias em que você pode precisar ter uma única chave em uma tabela de hash com vários valores.

Nesse caso, você efetivamente deseja criar uma tabela de hash com matrizes como os valores.

Para começar, acho melhor mostrar os códigos que usei para diferenciar uma tabela de hash de um array.

|_+_| |_+_|

Portanto, para criar uma tabela de hash do PowerShell com chaves únicas e vários valores, execute um script semelhante a este:

|_+_|

No roteiro acima, LogName é a chave hashtable enquanto os valores System, Application e Security são atribuídos à chave. Efetivamente, criamos uma única chave hastable com vários valores.

Para listar os valores individuais no LogName chave, execute o comando abaixo:

|_+_|

A parte da captura de tela abaixo rotulada (1) é resultado da tabela de hash, $hashtableWithArrays . Além disso, a porção rotulada (2) mostra o resultado da $hashtableWithArrays.Values comando.

Se você estiver familiarizado com os Logs de Eventos do Windows – Sistema, Aplicativo e Segurança – são nomes de logs de eventos do Windows.

Na próxima seção, mostrarei como usar o loop ForEach do PowerShell para percorrer a tabela de hash acima - e executar o Get-EventLog comando nesses 3 logs de eventos – usando um único script do PowerShell.

Como iterar a tabela de hash do PowerShell com o loop ForEach

Como iterar a tabela de hash do PowerShell com o ForEach

Na última seção, criei uma tabela de hash do PowerShell de chave única com vários valores.

Para o exemplo nesta seção, alterei a variável que armazenou a tabela de hash para LogNameKeys . Aqui está o script atualizado.

|_+_|

Nesta seção, ensinarei como usar Para cada para percorrer os valores armazenados no LogName chave e execute o Get-EventLog comando.

Para um rápido curso de atualização no PowerShell ForEach, abaixo está a sintaxe geral de um comando PowerShell ForEach:

|_+_|

Se você aplicar a sintaxe acima ao nosso Nomes de registro hashtable, o comando atualizado ficará assim:

As linhas que começam com # são comentários do PowerShell. |_+_|

A primeira parte do script é o mesmo script que cria a tabela de hash do PowerShell de chave única com vários valores. Aqui está o roteiro:

|_+_|

Na segunda parte do script, converti os valores armazenados em ($LogNameKeys.Values) para strings e salvei o resultado em outra variável, LogNameKeysAsStrings .

|_+_|

Finalmente, na terceira parte do script – o loop ForEach é introduzido:

|_+_|

Nesta parte do script, informamos ao PowerShell para obter cada valor armazenado no LogName chave ( $LogNameKeysAsStrings ) – salve esse valor individual temporariamente na variável LogNameKey – então, use a variável temporal para executar o Get-EventLog comando.

Eu incluí o O mais novo parâmetro do Get-EventLog comando com um valor de 5 para que o comando retorne as últimas 5 entradas de cada log de eventos. Quando você olha para um script do PowerShell, pode parecer complicado. No entanto, se você olhar de perto, geralmente é muito fácil.

Agora, copie o script abaixo em um novo documento PowerShell ISE e execute-o.

Abra o PowerShell ISE como administrador. Se você não abrir o PowerShell ISE como administrador, receberá mensagens de erro de acesso. |_+_|

A captura de tela abaixo exibiu o resultado do script. Existem 15 linhas no painel de resultados – representando 5 dos logs de eventos do sistema, aplicativo e segurança.

Como personalizar um relatório com tabela de hash do PowerShell e Select-Object

Como personalizar um relatório com tabela de hash do PowerShell e Select-Object

Na última seção, criamos um script do PowerShell que extrai o relatório de log de eventos do Windows. Aqui está uma captura de tela do relatório

alexa pode encontrar meu controle remoto firestick?

A saída padrão do script tem 5 colunas – Índice , Tempo , Tipo de entrada , Fonte , InstanceID , e Mensagem . Se você estiver enviando isso como um relatório, talvez queira alterar os nomes dessas colunas para nomes que sejam facilmente compreensíveis.

Aqui está o script da última seção.

O roteiro foi ligeiramente modificado. Agora tenho uma variável, Relatório de Log de Eventos que salva a saída do loop ForEach. Vou explicar por que isso é necessário mais tarde. |_+_|

Para modificar os nomes dos cabeçalhos das colunas deste script, canalizaremos o Get-EventLog comando para um Selecionar-objeto comando.

Em seguida, crie uma tabela de hash do PowerShell dentro do Selecionar-objeto comando que modifica os nomes das colunas. Aqui está o script modificado que realiza a mágica.

|_+_|

O roteiro parece muito mais complexo do que realmente é. No entanto, se você focar na parte do script após Select-Object, será fácil identificar a diferença entre este script e a cópia anterior.

Especificamente, incluí hashtables no Selecionar-objeto bloco do código. Cada tabela de hash personaliza a saída do Get-EventLog comando.

Aqui está um exemplo de tabela de hash do Selecionar-objeto quadra:

|_+_|

Como de costume, a tabela de hash do PowerShell tem dois elementos. A chave é o Nome , o valor é o Expressão .

Outra coisa importante a notar é que no final de cada hashtable no Selecionar-objeto bloco, há uma vírgula (,).

Por fim, aqui está o resultado do script final no PowerShell:

Anteriormente, prometi explicar por que apresentei $EventLogReport variável para salvar a saída do loop ForEach. Sem essa variável, o resultado final exibirá 3 resultados individuais para cada um dos 3 logs de eventos. No entanto, armazenando todos os resultados em uma variável, consegui canalizar essa variável para Format-Table – isso exibe todo o resultado como uma única tabela. Aqui está o comando que realizou a mágica. |_+_|

Como exportar a tabela de hash do PowerShell para CSV

Como exportar a tabela de hash do PowerShell para CSV

Nesta seção final, você aprenderá como exportar uma tabela de hash do PowerShell para CSV.

No meu primeiro exemplo para esta seção, mostrarei como exportar este hashtabe para CSV.

|_+_|

Para exportar com sucesso esta tabela de hash do PowerShell para um arquivo CSV, você deve usar o GetEnumerator Método (discutido anteriormente) para listar os valores. Caso contrário, os pares de chave/valor reais não serão exportados.

Aqui está o script modificado que exporta a tabela de hash salva no tabela de hash variável para um arquivo CSV.

|_+_|

Em introduziu o script abaixo:

|_+_|

O roteiro inclui o GetEnumerator Método na tabela de hash. Em seguida, canaliza a saída para o Selecionar-objeto comando.

Por fim, canalizo a saída do Selecionar-objeto comando para o Exportar-Csv comando. Para ler mais sobre como usar Exportar-Csv Cmdlet, leia nosso guia – Powershell NoTypeInformation: Applications and Examples .

Quando você executa este script, ele cria um arquivo CSV chamado tabela de hash.csv , no caminho que você especificou. Veja a captura de tela abaixo para a saída do arquivo CSV.

|_+_|

No meu segundo exemplo, exportarei a saída do script que criamos na última seção – o script de log de eventos – para um arquivo CSV.

Aqui está o roteiro. Para exportar o relatório para CSV, adicionei o código abaixo deste no final deste script.

|_+_| |_+_|

O código canaliza a saída do Para cada loop – salvo no Relatório de Log de Eventos variável – para o Comando Export-Csv . O arquivo CSV gerado é mostrado na captura de tela abaixo.

É isso – um guia abrangente sobre a tabela de hash do PowerShell! Espero que tenha achado útil?

Se você achou útil, por favor, vote sim para a pergunta Foi este post útil abaixo.

Alternativamente, você pode fazer uma pergunta, deixar um comentário ou fornecer mais comentários com o formulário Deixe uma resposta encontrado no final desta página.

Por fim, para obter mais zonas S de tecnologia do PowerShell, visite nossa página de guia de instruções do Windows PowerShell. Você também pode achar nossa página Work from Home muito útil.

Referências e Leituras Adicionais

  1. Tudo o que você queria saber sobre hashtables
  2. Combine matrizes e tabelas de hash no PowerShell para diversão e lucro
  3. Sobre tabelas de hash