PowerShell Array Guide: How to Use and Create
Arrays are a fundamental feature of PowerShell. Arrays tornam possível ingerir, manipular e output estruturas de dados verdadeiros (e não apenas strings raw). Esta capacidade faz PowerShell diferente e mais útil do que outras linguagens de scripting.
neste artigo, vamos explicar quais são as matrizes, e como usá-las em PowerShell. Primeiro vamos mostrar como criar arrays em PowerShell, e depois como usar funções básicas para manipulá-los., Então vamos olhar para vários tipos diferentes de arrays, e explorar algumas das características mais sutis deles.
Get the Free PowerShell and Active Directory Essentials Video Course
o nosso objectivo é dar-lhe uma boa base para trabalhar com arrays em PowerShell. Uma vez que você domina estas noções básicas, você pode dar uma olhada em nosso curso sobre PowerShell para aprender mais.,
- Array Fundamentos
- Matrizes de Objetos
- Operadores Para Matrizes
- Como Adicionar Valores para uma Matriz
- Tipos de Matriz
- Avançadas Funções de Matriz
PowerShell Matrizes
as Matrizes são uma característica comum a quase todas as linguagens de programação. Eles são uma estrutura de dados que serve como uma coleção de múltiplos pedaços de dados. Ao trabalhar com um array, você pode usar o mesmo comando para executar a mesma função em cada item dentro de um array, ou acessar e manipular elementos individuais usando um índice.,
As matrizes em PowerShell podem conter um ou mais itens. Um item pode ser uma string, um inteiro, um objeto, ou mesmo outro array, e um array pode conter qualquer combinação destes itens. Cada um destes itens tem um índice, que sempre começa (às vezes confundindo) em 0. Então o primeiro item de uma matriz é dado o índice 0, o segundo é indexado como 1, e assim por diante.,
PowerShell matrizes são uma parte fundamental do PowerShell que aparecem em cada PowerShell tutorial lá fora, e um bom conhecimento de como trabalhar com eles é fundamental para muitos aspectos da utilização do PowerShell, a partir de configurar o Office 365 para utilizar o PowerShell para Pentesting.
Um exemplo de uma matriz PowerShell
a maneira mais fácil de ilustrar o que uma matriz é para tomar um exemplo. Vamos fazer uma matriz que represente uma tigela de fruta.,
Existem várias maneiras de criar arrays em Powershell, mas o mais fácil é executar este comando:
@()
Isto irá criar uma matriz vazia. Uma matriz vazia não é assim tão útil, entretanto, vamos adicionar alguns frutos à nossa nova matriz. Estes serão representados como texto strings. Para isso, execute este comando
$fruit = @('Apples','Oranges','Bananas')
Isto irá nomear um array “fruit”, e adicionar três itens a ele., Para ver que isso não tem funcionado, você pode ler a matriz a utilizar este comando:
PS /Users/yourname> $fruit
o Que será agora de retorno:
Apples Oranges Bananas
Como você pode ver, esta matriz é um grupo de peças individuais de dados. PowerShell irá indexá-los automaticamente da forma como explicamos acima: “Apple” será indexado como 0, “laranjas” como 1, e “Bananas” como 2.
Este exemplo pode fazer com que pareça que arrays são objetos bastante simples, e de certa forma eles são. Sua simplicidade, no entanto, é também o que os torna objetos tão flexíveis e poderosos., No resto deste guia, vamos dar-lhe uma amostra do que você pode fazer com arrays.
Array Fundamentals
nesta secção, vamos olhar para as formas mais básicas de criar e trabalhar com arrays em PowerShell.
crie um Array
primeiro, criaremos um array. A maneira padrão de fazer isso é usar @(), embora haja outras maneiras.
Por agora, vamos criar um array chamado “data”. Para fazer isso, execute:
$data = @()
Este array está vazio no momento porque não especificamos quaisquer dados para ele., Para verificar quantos itens estão em um array, podemos usar a função de contagem:
$data.count
que, no momento, irá retornar um 0, porque não há itens em nosso array. Para fazer um array com alguns dados nele, nós colocamos esses dados dentro dos parênteses após o@:
$data = @('Zero','One','Two','Three')
execute a mesma função de contagem agora, e você verá que existem 4 itens neste array. Para ver estes itens novamente, nós apenas invocamos o array:
$data
que irá listar os itens que colocamos no array.,
acessando itens
Agora temos um array, vamos querer acessar itens a partir dele. Há várias maneiras de fazer isso. O primeiro é usar o índice dos itens na matriz. Como dissemos antes, os índices começam em 0, então para recuperar o primeiro item em nosso array vamos precisar dizer PowerShell para olhar para o item cujo índice é zero. Nós fazemos isso executando:
$data
Isto irá retornar” zero ” porque essa foi a primeira string que colocamos em nosso array.,
também podemos estender esta sintaxe para retornar vários itens da mesma matriz, apenas colocando mais índices no mesmo comando. For example, run:
$data
This will return”Zero Two Three”. Os itens são devolvidos pela mesma ordem que você introduziu os índices. Você também pode usar mais sintaxe para retornar conjuntos de itens de uma matriz. Por exemplo:
$data
irá devolver todos os itens com um índice entre 1 e 3 (inclusive)., E:
$data
retornará o último item do array: o número negativo indica PowerShell para contar para trás a partir do final da matriz, portanto, neste caso, este comando irá retornar “Três”, o último item em nosso teste de matriz.
alterar itens
o mesmo método pode ser usado para atualizar os itens em uma matriz. Por exemplo, para atualizar o item cujo índice é 2 (lembre-se que este é o terceiro item no array), podemos executar:
$data = 'second'
isto nos dá acesso direto aos itens dentro de um array.,
ações iteradas
uma das mais poderosas características de PowerShell (e, de fato, de qualquer interface de linha de comando) é a capacidade de executar a mesma ação em todos os itens de uma matriz. Há uma série de maneiras diferentes de fazer isso.
O mais básico é usar um Pipeline, que é o carácter |. Quando você passa um array para um pipeline, cada item em um array é processado individualmente. Como temos apontado em nosso artigo sobre objetos PowerShell e piping de dados, esta é muitas vezes a maneira mais simples de realizar ações iteradas.,
Por exemplo, para adicionar uma descrição para cada item na matriz, podemos usar este comando:
$data | ForEach-Object {"Item: "}
Este comando informa PowerShell para levar os itens em $dados um de cada vez e, em seguida, para cada um deles adicionar “Item:” no início, seguido pelo valor original.
Existem várias outras formas de executar ações iteradas em PowerShell, muitas das quais serão familiares se você tiver usado outras linguagens de programação: PowerShell inclui ForEach loops, for loops, and Switch loops. Para mais detalhes sobre estes, consulte a documentação da Microsoft.,
matrizes de objetos
até agora, temos trabalhado com um array que contém dados básicos: uma string. No entanto, arrays também podem conter objetos, e muitos dos usos mais comuns de configuração PowerShell – like Office 365 – requerem que você saiba como trabalhar com objetos. Então vamos olhar para alguns comandos básicos para fazer isso.
Criando um Array de objetos
podemos criar um array de objetos da mesma forma que fizemos com strings, usando a função @ ()., Por exemplo, para fazer uma lista de testes de funcionários, podemos usar:
a maioria dos cmdlets irá retornar um array deste tipo quando você atribuir-lhes uma variável para trabalhar com.
acessando objetos de Arrays
o processo que percorremos acima para acessar partes individuais de dados pode igualmente ser usado com arrays que contêm objetos., Por exemplo, a execução de:
$data
Irá retornar:
FirstName LastName ----- ---- Kevin Marquette
em Alternativa, podemos acessar as propriedades de objetos individuais especificando a propriedade que gostaríamos dentro do mesmo comando, assim:
$data.FirstName
Que irá retornar “Kevin”.
Updating Object Properties in Arrays
Going further, the same syntax gives us the capability of updating individual properties within objects that are held in arrays., Por exemplo:
$data.FirstName = 'Jay'
irá atualizar a propriedade do primeiro nome no primeiro item da nossa lista para “Jay”.
acessando cada propriedade em uma matriz de objetos
na maioria das linguagens de programação, teríamos que usar um processo iterativo (veja acima) para acessar todas as propriedades em uma matriz de objetos. Podemos fazer isso em PowerShell, bem como, é claro, executando o comando:
$data | ForEach-Object {$_.LastName}
Isso irá retornar uma lista de todas as Sobrenome propriedades na nossa matriz, mas é computacionalmente caro e difícil de escrever cada vez que você deseja ver esses dados., Então, em vez disso, PowerShell tem um atalho. Execute isto:
$data.LastName
e verá a mesma lista. PowerShell está realmente tomando cada objeto por sua vez, assim como antes, mas ele esconde esta complexidade de nós.
Operadores Para Matrizes
Quase todos os operadores que podemos utilizar para itens de dados individuais em PowerShell irá também trabalhar com arrays, mas alguns deles funcionam de maneira um pouco diferente quando usado desta forma. Então vamos dar uma olhada nos operadores mais comuns, e como você pode usá-los em matrizes.,
– join
o operador-join é um dos comandos mais usados em PowerShell, e é extremamente útil ao trabalhar com arrays. It can be used iteratively on the items in an array to join them together in the output of an array.vejamos um exemplo. Primeiro, crie uma matriz simples:
$data = @(1,2,3,4)
E, em seguida, utilizar -se juntar para inserir um hífen entre cada item e, na saída, o resultado:
$data -join '-'
Que irá retornar “1-2-3-4”., O operador-join também pode ser usado sem um delimitador, em que podem Os itens em uma matriz será saída como uma série de valores não separados.
– contains
The-contains operator works on arrays in a very similar way to its usage with single data points. Você pode usá-lo para verificar se um array contém uma string particular, e ele irá emitir um valor booleano. Por exemplo:
PS> $data = @('red','green','blue') PS> $data -contains 'green' True
Igualdades
Existem dois operadores para verificar a igualdade no PowerShell: -eq e -ne., Se você está acostumado a usá-los em valores únicos, no entanto, a maneira que estes trabalhos em relação a arrays pode parecer um pouco estranho. Se você usar -eq, por exemplo, o operador não irá emitir um “verdadeiro” booleano, mas em vez disso irá retornar o objeto que corresponde.
Por exemplo:
PS> $data = @('red','green','blue') PS> $data -eq 'green' green
o operador-ne funciona da mesma forma, excepto que lhe dará todos os valores que não são iguais ao seu valor especificado., Então:
PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue
você pode, no entanto, usar uma declaração if() para comparar a saída destes operadores com a sua saída esperada, e retornar uma saída “verdadeira” ou “falsa”.
como adicionar valores a um Array
Depois de todas as instruções acima, você provavelmente está se perguntando Por que nós deixamos de fora adicionar itens de dados a um array. Isso é porque não há maneira de fazer isso. Um array, uma vez criado, permanece o mesmo tamanho para sempre, e assim, a fim de torná-lo maior, você precisa copiá-lo para um novo array, e excluir o original.,
isso parece complicado, mas Powershell lida com este processo para você usando uma série de operadores bastante simples. Há duas formas principais de o fazer.
adição de Array
PowerShell pode adicionar duas matrizes juntas usando o operador”+”, que esconde a complexidade do que o sistema está realmente fazendo. Por exemplo, se você fizer duas matrizes de teste como esta:
$first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )
você pode adicioná-las em conjunto usando apenas:
isto fará uma nova matriz com todos os quatro valores, e produzirá os resultados., Note, no entanto, que ele não vai dar a este novo array um novo nome. Para isso, usamos o operador+=.
Além de Igual para Combinação de Matrizes
em Vez de usar o operador “+” no exemplo acima, poderíamos ter usado o “+=” operador, que irá dar-nos uma nova matriz:
$first += 'Two, Three'
O comando é simples, mas é esconder o que PowerShell está realmente fazendo aqui. Ele está copiando todos os valores de $first, e fazendo uma nova matriz que inclui os valores extras. Ele então apaga o array original.,
isto é um pouco problemático porque é computacionalmente caro. Com arrays pequenos, você pode não notar, mas com grandes quantidades de dados este método pode bloquear rapidamente o seu sistema. Foi por isso que lhe demos uma maneira de resolver este problema, lá em baixo.
Array Types
até agora, temos lidado com Matrizes Padrão em PowerShell. Embora o PowerShell não nos tenha dito na época, cada matriz que criamos até agora é de um tipo, o tipo]. Este tipo de array pode conter qualquer tipo de valor de dados.,
matrizes fortemente tipadas
No entanto, há momentos em que você quer restringir os tipos de dados ou objetos que um array pode manter para apenas um. Podemos fazer isso usando um array fortemente digitado, que só pode conter o tipo de dados especificado.
Por exemplo, para fazer um array que só pode tomar inteiros, podemos usar:
PS> ] $numbers = 1,2,3
Se você tentar colocar o tipo errado de valor de dados em um array fortemente tipado, ele irá retornar um código de erro.
ArrayList
Como dissemos acima, adicionar itens a arrays pode ser um aborrecimento., No entanto, há um tipo diferente de coleção – ArrayList – que lida com isso de forma mais elegante. Para usar este tipo de coleção, no entanto, teremos que invocar o framework.Net, que pode lançar algumas saídas infelizes em nosso caminho.
Para criar um ArrayList, e, em seguida, adicionar itens, execute o seguinte:
$myarray = ::new() $myArray.Add('Value')
Aqui, podemos usar o padrão .Net construtor para criar um novo ArrayList e, em seguida, usando a opção-Adicionar operador para adicionar itens. O operador está lá porque às vezes estes comandos lançam para fora Saídas estranhas que podem interferir com o código.,
indo mais longe
estes são os tipos de matriz mais comuns em PowerShell, mas há alguns outros. Se você está se desenvolvendo como um usuário PowerShell, é útil começar a usar ArrayLists em vez de arrays retos, mas você também deve estar ciente de que este tipo de array não é usado por usuários avançados.
em vez disso, os codificadores mais experientes irão usar um tipo genérico de lista chamado List. Este tipo de lista é um pouco mais complexa de usar porque é derivada diretamente de C#, mas uma vez que você domina, ele oferece muito mais flexibilidade do que os arrays que discutimos até agora.,
Funções Avançadas de Array
além da funcionalidade básica que cobrimos até agora, existem também uma série de funções de array mais avançadas, e algumas características extras a notar, como você começa a usá-las mais frequentemente.
matrizes pré-dimensionadas
a maneira padrão de criar matrizes acima irá criar um array com um tamanho determinado pelo número de itens nele. No entanto, você pode criar um array de um tamanho especificado usando o novo ($size) construtor.
Você pode fazer isso assim:
$data = ]::new(4)
Se você executar A.,count query on this array, it will return “4”, because even though it doesn’t have data in it, it will fill the space with 0. Isto é realmente extremamente útil se você precisar inicializar um novo array que é preenchido com zeros porque um array pré-dimensionado será preenchido inicialmente com 0.
multiplicando Arrays
multiplicando os objetos em um array – e especialmente strings-é algo que confunde a maioria das pessoas quando eles têm que fazê-lo pela primeira vez., Temos visto scripts extremamente complicados if() para alcançar este resultado, mas há uma maneira muito mais simples:
PS> $data = @('red','green','blue') PS> $data * 3
Yep, isso mesmo. Isto irá criar um novo array com cada valor repetido três vezes. Você também pode usar este comando como uma forma alternativa de preencher um array com zeros (ou qualquer outro valor padrão), fazendo um array com o seu valor escolhido, e depois multiplicando-o quantas vezes quiser.
matrizes aninhadas
como muitas outras linguagens de programação, PowerShell suporta matrizes aninhadas., A maneira padrão de fazer isso em PowerShell é usar um array multidimensional. O exemplo mais simples disso é criar um array bidimensional:
$data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )
a estrutura de dados que você está fazendo com este comando é uma matriz clássica, e pode ser trabalhada como aquelas em outras linguagens de programação. Por exemplo, para acessar um determinado valor a partir deste array, você precisará especificar duas dimensões.,
Por exemplo, para acessar o valor “3”, gostaria de usar este:
PS> $outside = 0 PS> $inside = 2 PS> $data 3
Este comando pode ser usado para acesso de qualquer valor, mas você precisa adicionar parênteses aninhados dentro de cada nível da matriz.
uma palavra Final
Todas as instruções acima podem ser muito para os usuários que estão chegando primeiro a PowerShell, mas eles foram cuidadosamente escolhidos como uma forma de aprender a língua. Ao combinar as várias técnicas, você pode construir scripts poderosos para automatizar muitos dos mais frequentes – e mais demorado – trabalho que você faz com PowerShell.,estas competências também o ajudarão a ir além do PowerShell. Muitas das linguagens mais comuns usadas para gerenciar a segurança cibernética, como o NetCat e o Nmap, usam muitos dos mesmos princípios que o PowerShell faz. E assim, usar PowerShell para melhorar sua segurança cibernética é uma ótima maneira de aprender a proteger seus sistemas de forma mais geral.