Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Descreve matrizes, que são estruturas de dados projetadas para armazenar coleções de itens.
Descrição longa
Uma matriz é uma estrutura de dados projetada para armazenar uma coleção de itens. Os itens podem ser do mesmo tipo ou de tipos diferentes.
A partir do Windows PowerShell 3.0, uma coleção de zero ou um objeto tem algumas propriedades de matrizes.
Criando e inicializando uma matriz
Para criar e inicializar uma matriz, atribua vários valores a uma variável. Os valores armazenados na matriz são delimitados com uma vírgula e separados do nome da variável pelo operador de atribuição (=).
Por exemplo, para criar uma matriz chamada $A que contém os sete valores numéricos (int) de 22, 5, 10, 8, 12, 9 e 80, digite:
$A = 22,5,10,8,12,9,80
Você também pode criar e inicializar uma matriz usando o operador de intervalo (..). Por exemplo, para criar e inicializar uma matriz chamada "$B" que contém os valores de 5 a 8, digite:
$B = 5..8
Como resultado, $B contém quatro valores: 5, 6, 7 e 8.
Quando nenhum tipo de dados é especificado, o PowerShell cria cada matriz como uma matriz de objeto (tipo: System.Object[]). Para determinar o tipo de dados de uma matriz, use o método GetType(). Por exemplo, para determinar o tipo de dados da matriz $a, digite:
$a.GetType()
Para criar uma matriz fortemente tipada, ou seja, uma matriz que pode conter apenas valores de um tipo específico, converta a variável como um tipo de matriz, como string[], long[] ou int32[]. Para converter uma matriz, preceda o nome da variável com um tipo de matriz entre colchetes. Por exemplo, para criar uma matriz de inteiros de 32 bits chamada $ia contendo quatro inteiros (1500, 2230, 3350 e 4000), digite:
[int32[]]$ia = 1500,2230,3350,4000
Como resultado, a matriz $ia pode conter apenas inteiros.
Você pode criar matrizes que são convertidas em qualquer tipo com suporte no Microsoft .NET Framework. Por exemplo, os objetos que Get-Process recupera para representar processos são do tipo System.Diagnostics.Process. Para criar uma matriz fortemente tipada de objetos de processo, insira o seguinte comando:
[Diagnostics.Process[]]$zz = Get-Process
O operador de subexpressão de matriz
O operador de subexpressão de matriz cria uma matriz, mesmo que contenha zero ou um objeto.
A sintaxe do operador de array é a seguinte:
@( ... )
Você pode usar o operador de matriz para criar uma matriz de zero ou um objeto. Por exemplo:
PS> $a = @("Hello World")
PS> $a.Count
1
PS> $b = @()
PS> $b.Count
0
O operador de array é particularmente útil em scripts quando você está obtendo objetos, mas não sabe quantos objetos você obterá. Por exemplo:
$p = @(Get-Process Notepad)
Para obter mais informações sobre o operador de subexpressão de matriz, consulte about_Operators.
Acessando e usando elementos de matriz
Lendo uma matriz
Você pode se referir a uma matriz usando seu nome de variável. Para exibir todos os elementos na matriz, digite o nome da matriz. Por exemplo, supondo que $a seja uma matriz contendo inteiros 0, 1, 2, até 9; digitando:
$a
0
1
2
3
4
5
6
7
8
9
Você pode se referir aos elementos em uma matriz usando um índice, começando na posição 0. Coloque o número de índice entre parênteses. Por exemplo, para exibir o primeiro elemento na matriz $a, digite:
$a[0]
0
Para exibir o terceiro elemento na $a matriz, digite:
$a[2]
2
Você pode recuperar parte da matriz usando um operador de intervalo para o índice. Por exemplo, para recuperar do segundo ao quinto elementos da matriz, digite:
$a[1..4]
1
2
3
4
Números negativos são contados a partir do final da matriz. Por exemplo, "-1" refere-se ao último elemento da matriz. Para exibir os três últimos elementos da matriz, em ordem crescente de índice, digite:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Se você digitar índices negativos em ordem decrescente, sua saída será alterada.
$a = 0 .. 9
$a[-1..-3]
9
8
7
No entanto, seja cauteloso ao usar essa notação. A notação vai do limite final ao início da matriz.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
Além disso, um erro comum é assumir $a[0..-2] refere-se a todos os elementos da matriz, exceto o último. Ele se refere aos primeiros, últimos e últimos elementos na matriz.
Você pode usar o operador de adição (+) para combinar intervalos com uma lista de elementos em uma matriz. Por exemplo, para exibir os elementos nas posições de índice 0, 2 e 4 a 6, digite:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
Além disso, para listar vários intervalos e elementos individuais, você pode usar o operador de adição. Por exemplo, para listar os elementos de zero a dois, quatro a seis e o elemento no oitavo tipo posicional:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Iterações sobre elementos de matriz
Você também pode usar construções de loop, como loops ForEach, For e While, para se referir aos elementos em uma matriz. Por exemplo, para usar um loop ForEach para exibir os elementos na $a matriz, digite:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
O loop Foreach itera pela matriz e retorna cada valor na matriz até chegar ao final da matriz.
O loop For é útil quando você está incrementando contadores enquanto examina os elementos em uma matriz. Por exemplo, para usar um loop For para retornar todos os outros valores em uma matriz, digite:
$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Você pode usar um loop While para exibir os elementos em uma matriz até que uma condição definida não seja mais verdadeira. Por exemplo, para exibir os elementos na $a matriz enquanto o índice da matriz for menor que 4, digite:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i];
$i++
}
0
1
2
3
Propriedades de matrizes
Contagem ou Comprimento ou LongLength
Para determinar quantos itens estão em uma matriz, use a Length propriedade ou seu Count alias.
Longlength é útil se a matriz contiver mais de 2.147.483.647 elementos.
$a = 0..9
$a.Count
$a.Length
10
10
Classificação
Retorna o número de dimensões na matriz. A maioria das matrizes no PowerShell tem apenas uma dimensão. Mesmo quando você pensa que está construindo uma matriz multidimensional; como no exemplo a seguir:
$a = @(
@(0,1),
@("b", "c"),
@(Get-Process)
)
[int]$r = $a.Rank
"`$a rank: $r"
$a rank: 1
A criação de uma matriz verdadeiramente multidimensional, no PowerShell, requer a assistência do .Net Framework. Como no exemplo a seguir:
[int[,]]$rank2 = [int[,]]::new(5,5)
$rank2.rank
2
Métodos de arrays
Limpar
Define todos os valores de elemento para o valor padrão do tipo de elemento da matriz. O método Clear() não redefine o tamanho da matriz.
No exemplo $a a seguir está uma matriz de objetos.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
Neste exemplo, $intA é explicitamente digitado para conter números inteiros.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
Para cada
Permite iterar sobre todos os elementos do array e realizar uma determinada operação para cada elemento do array.
O método ForEach tem várias sobrecargas que executam operações diferentes.
ForEach(scriptblock expression)
ForEach(type convertToType)
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach(string methodName)
ForEach(string methodName, object[] arguments)
ForEach(scriptblock expression, object[] arguments)
ForEach(expressão scriptblock)
ForEach(expressão scriptblock, argumentos object[])
Observação
A sintaxe requer o uso de um bloco de script. Os parênteses são opcionais.
O exemplo a seguir mostra como usar o método foreach. Nesse caso, a intenção é gerar o valor quadrado dos elementos na matriz.
Observe que esse método foi adicionado no PowerShell v4 e não está disponível nas versões abaixo desta. Para versões anteriores, use o método Pipelining para o cmdlet ForEach-Object
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Assim como o -ArgumentList parâmetro de ForEach-Object, o arguments parâmetro permite a passagem de uma matriz de argumentos para um bloco de script configurado para aceitá-los.
ForEach(tipo convertToType)
O ForEach método pode ser usado para converter rapidamente os elementos em um tipo diferente; o exemplo a seguir mostra como converter uma lista de datas de cadeia de caracteres em [DateTime] tipo.
@("1/1/2017", "2/1/2017", "3/1/2017").ForEach([datetime])
Sunday, January 1, 2017 12:00:00 AM
Wednesday, February 1, 2017 12:00:00 AM
Wednesday, March 1, 2017 12:00:00 AM
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
O ForEach método também pode ser usado para recuperar rapidamente ou definir valores de propriedade para cada item na coleção.
# Set all LastAccessTime properties of files to the current date.
(dir 'C:\Temp').ForEach('LastAccessTime', (Get-Date))
# View the newly set LastAccessTime of all items, and find Unique entries.
(dir 'C:\Temp').ForEach('LastAccessTime') | Get-Unique
Wednesday, June 20, 2018 9:21:57 AM
ForEach(string methodName)
ForEach(string methodName, object[] argumentos)
Por fim, ForEach os métodos podem ser usados para executar um método em cada item da coleção.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Assim como o -ArgumentList parâmetro de ForEach-Object, o arguments parâmetro permite a passagem de uma matriz de argumentos para um bloco de script configurado para aceitá-los.
Observação
A partir do Windows PowerShell 3.0, a recuperação de propriedades e a execução de métodos para cada item em uma coleção também podem ser realizadas usando "Métodos de objetos escalares e coleções" Você pode ler mais sobre isso aqui about_methods
Onde
Permite filtrar ou selecionar os elementos da matriz. O script deve ser avaliado como algo diferente de: zero (0), cadeia de caracteres $false vazia ou $null para que o elemento seja exibido após o Where
Há uma definição para o Where método.
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
O Expression bloco de script is necessário para filtragem, o mode argumento opcional permite recursos de seleção adicionais e o numberToReturn argumento opcional permite limitar quantos itens são retornados do filtro.
Observação
A sintaxe requer o uso de um bloco de script. Os parênteses são opcionais.
O exemplo a seguir mostra como selecionar todos os números ímpares da matriz.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
Os seguintes modos de seleção estão disponíveis.
Padrão
O Default modo filtra itens usando o Expression scriptblock.
Se a numberToReturn for fornecido, ele especifica o número máximo de itens a serem devolvidos.
# Get the zip files in the current users profile, sorted by LastAccessTime.
$Zips = dir $env:userprofile -Recurse '*.zip' | Sort-Object LastAccessTime
# Get the least accessed file over 100MB
$Zips.Where({$_.Length -gt 100MB}, 'Default', 1)
Observação
O modo Default e o modo First retornam os primeiros itens (numberToReturn) e podem ser usados de forma intercambiável.
Último
$h = (Get-Date).AddHours(-1)
$logs = dir 'C:\' -Recurse '*.log' | Sort-Object CreationTime
# Find the last 5 log files created in the past hour.
$logs.Where({$_.CreationTime -gt $h}, 'Last', 5)
Pular até
O modo SkipUntil ignora todos os objetos em uma coleção até que um objeto passe pelo filtro da expressão do bloco de script. Em seguida, ele retorna TODOS os itens de coleção restantes sem testá-los.
Apenas um item aprovado é testado
Isso significa que a coleção retornada conterá itens aprovados e não aprovados que NÃO foram testados.
O número de itens retornados pode ser limitado passando um valor para o numberToReturn argumento.
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
Até
O Until modo inverte o SkipUntil modo. Ele retorna TODOS os itens de uma coleção até que um item aprove a expressão de bloco de script. Depois que um item passa a expressão scriptblock, o Where método para de processar itens.
Isso significa que você receberá o primeiro conjunto de itens não aprovados do Where método.
Depois que um item passar, o resto NÃO será testado nem devolvido.
O número de itens retornados pode ser limitado passando um valor para o numberToReturn argumento.
# Retrieve the first set of numbers less than or equal to 10.
(1..50).Where({$_ -gt 10}, 'Until')
# This would perform the same operation.
(1..50).Where({$_ -le 10})
1
2
3
4
5
6
7
8
9
10
Observação
Ambos Until e SkipUntil operam sob a premissa de NÃO testar um lote de itens.
Until retorna os itens ANTES da primeira passagem.
SkipUntil retorna todos os itens APÓS a primeira passagem, incluindo o primeiro item de passagem.
Divisão
O Split modo divide ou agrupa itens de coleção em duas coleções separadas. Aqueles que passam a expressão scriptblock e aqueles que não.
Se a numberToReturn for especificado, a primeira coleção conterá os itens de passagem , não excedendo o valor especificado.
Os objetos restantes, mesmo aqueles que PASSAM o filtro de expressão, serão retornados na segunda coleção.
$running, $stopped = (Get-Service).Where({$_.Status -eq 'Running'}, 'Split')
$running
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
...
$stopped
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
...
Obter os membros de uma matriz
Para obter as propriedades e os métodos de uma matriz, como a propriedade Length e o método SetValue, use o parâmetro InputObject do cmdlet Get-Member.
Quando você canaliza uma matriz para o Get-Member, o PowerShell envia os itens um de cada vez e Get-Member retorna o tipo de cada item na matriz (ignorando duplicatas).
Quando você usa o parâmetro -InputObject , Get-Member retorna os membros da matriz.
Por exemplo, o comando a seguir obtém os membros da variável de $a matriz.
Get-Member -InputObject $a
Você também pode obter os membros de uma matriz digitando uma vírgula (,) antes do valor que é canalizado para o cmdlet Get-Member. A vírgula torna a matriz o segundo item em uma matriz de matrizes. O Windows PowerShell canaliza as matrizes uma de cada vez e Get-Member retorna os membros da matriz. Como os próximos dois exemplos.
,$a | Get-Member
,(1,2,3) | Get-Member
Manipulando uma matriz
Você pode alterar os elementos em uma matriz, adicionar um elemento a uma matriz e combinar os valores de duas matrizes em uma terceira matriz.
Para alterar o valor de um elemento específico em uma matriz, especifique o nome da matriz e o índice do elemento que você deseja alterar e, em seguida, use o operador de atribuição (=) para especificar um novo valor para o elemento. Por exemplo, para alterar o valor do segundo item na $a matriz (posição 1 do índice) para 10, digite:
$a[1] = 10
Você também pode usar o método SetValue de uma matriz para alterar um valor. O exemplo a seguir altera o segundo valor (posição de índice 1) da $a matriz para 500:
$a.SetValue(500,1)
Você pode usar o operador += para adicionar um elemento a uma matriz. O exemplo a seguir mostra como adicionar um elemento à $a matriz.
$a = @(0..4)
$a += 5
Observação
Quando você usa o operador, o += PowerShell realmente cria uma nova matriz com os valores da matriz original e o valor agregado. Isso pode causar problemas de desempenho se a operação for repetida várias vezes ou se o tamanho da matriz for muito grande.
Não é fácil excluir elementos de uma matriz, mas você pode criar uma nova matriz que contenha apenas elementos selecionados de uma matriz existente. Por exemplo, para criar a $t matriz com todos os elementos da matriz, exceto o valor na posição 2 do $a índice, digite:
$t = $a[0,1 + 3..($a.length - 1)]
Para combinar duas matrizes em uma única matriz, use o operador de adição (+). O exemplo a seguir cria duas matrizes, combina-as e exibe a matriz combinada resultante.
$x = 1,3
$y = 5,9
$z = $x + $y
Como resultado, a $z matriz contém 1, 3, 5 e 9.
Para excluir uma matriz, atribua um valor de $null à matriz. O comando a seguir exclui a matriz na $a variável.
$a = $null
Você também pode usar o Remove-Item cmdlet, mas atribuir um valor de $null é mais rápido, especialmente para matrizes grandes.
Matrizes de zero ou um
A partir do Windows PowerShell 3.0, uma coleção de zero ou um objeto tem a propriedade Count e Length. Além disso, você pode indexar em uma matriz de um objeto. Esse recurso ajuda a evitar erros de script que ocorrem quando um comando que espera uma coleção obtém menos de dois itens.
Os exemplos a seguir demonstram esse recurso.
Zero objetos
$a = $null
$a.Count
$a.Length
0
0
Um objeto
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4