Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Descrição Breve
Descreve matrizes, que são estruturas de dados projetadas para armazenar recolhas de itens.
Descrição longa
Uma matriz é uma estrutura de dados que é projetada para armazenar uma coleção de itens. Os itens podem ser do mesmo tipo ou tipos diferentes.
A partir do Windows PowerShell 3.0, uma coleção de zero ou um objeto tem algumas propriedades de matrizes.
Criar e inicializar 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 variável pelo operador de atribuição (=).
Por exemplo, para criar uma matriz chamada $A que contenha os sete valores numéricos (int) de 22, 5, 10, 8, 12, 9 e 80, tipo:
$A = 22,5,10,8,12,9,80
Também pode criar e inicializar uma matriz utilizando o operador de gama (..). Por exemplo, para criar e inicializar uma matriz chamada "$B" que contenha os valores 5 a 8, escreva:
$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 matriz de objeto (tipo: System.Object[]). Para determinar o tipo de dados de uma matriz, utilize o método GetType(). Por exemplo, para determinar o tipo de dados da matriz $a, escreva:
$a.GetType()
Para criar uma matriz fortemente dactilografada, isto é, uma matriz que pode conter apenas valores de um determinado tipo, lançou a variável como um tipo de matriz, como a corda[], longa[], ou int32[]. Para lançar uma matriz, preceda o nome variável com um tipo de matriz incluído nos suportes. Por exemplo, para criar uma matriz completa de 32 bits chamada $ia contendo quatro inteiros (1500, 2230, 3350 e 4000), tipo:
[int32[]]$ia = 1500,2230,3350,4000
Como resultado, a matriz $ia pode conter apenas inteiros.
Pode criar matrizes que sejam lançadas para qualquer tipo suportado no Quadro Microsoft .NET. Por exemplo, os objetos que o Get-Process recupera para representar processos são do tipo System.Diagnostics.Process. Para criar uma matriz fortemente dactilografada de objetos de processo, insira o seguinte comando:
[Diagnostics.Process[]]$zz = Get-Process
O operador de sub-expressão de matriz
O operador de subexexição de matriz cria uma matriz, mesmo que contenha zero ou um objeto.
A sintaxe do operador da matriz é a seguinte:
@( ... )
Pode utilizar 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 matriz é particularmente útil nos scripts quando está a obter objetos, mas não sabe quantos objetos vai receber. Por exemplo:
$p = @(Get-Process Notepad)
Para obter mais informações sobre o operador de subexposição de matrizes, consulte about_Operators.
Aceder e utilizar elementos de matriz
Ler uma matriz
Pode consultar uma matriz utilizando o seu nome variável. Para visualizar todos os elementos da matriz, digite o nome da matriz. Por exemplo, assumindo $a que é uma matriz que contém inteiros 0, 1, 2, até 9; dactilografia:
$a
0
1
2
3
4
5
6
7
8
9
Pode consultar os elementos de uma matriz utilizando um índice, a partir da posição 0. Incluir o número do índice nos parênteses. Por exemplo, para mostrar o primeiro elemento na $a matriz, escreva:
$a[0]
0
Para mostrar o terceiro elemento na $a matriz, escreva:
$a[2]
2
Pode recuperar parte da matriz utilizando um operador de gama para o índice. Por exemplo, para recuperar o segundo a quinto elementos da matriz, escreveria:
$a[1..4]
1
2
3
4
Os números negativos contam a partir do fim da matriz. Por exemplo, "-1" refere-se ao último elemento da matriz. Para exibir os últimos três elementos da matriz, em ordem ascendente de índice, escreva:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Se escrever índices negativos em ordem descendente, a sua saída muda.
$a = 0 .. 9
$a[-1..-3]
9
8
7
No entanto, tenha cuidado ao utilizar esta notação. Os ciclos de notação desde o limite final até 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] que se refere a todos os elementos da matriz, exceto o último. Refere-se aos primeiros, últimos e últimos elementos da matriz.
Pode utilizar o operador plus (+) para combinar uma gama com uma lista de elementos numa matriz. Por exemplo, para visualizar os elementos nas posições de índice 0, 2 e 4 a 6, escreva:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
Além disso, para listar várias gamas e elementos individuais pode utilizar o operador plus. 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
Também pode utilizar construções em loop, tais como ForEach, For e While loops, para se referir aos elementos de uma matriz. Por exemplo, para utilizar um laço ForEach para visualizar os elementos na $a matriz, escreva:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
O laço foreach iterates através da matriz e devolve cada valor na matriz até chegar ao fim da matriz.
O loop For é útil quando está a incrementar os contadores enquanto examina os elementos numa matriz. Por exemplo, para utilizar um Loop Para devolver todos os outros valores numa matriz, escreva:
$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Pode utilizar um loop While para exibir os elementos numa matriz até que uma condição definida não seja mais verdadeira. Por exemplo, para visualizar os elementos na $a matriz enquanto o índice de matriz é inferior a 4, tipo:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i];
$i++
}
0
1
2
3
Propriedades de matrizes
Contagem ou Comprimento ou Comprimento
Para determinar quantos itens estão numa matriz, use a propriedade ou o Length seu Count pseudónimo. Longlengthé útil se a matriz contém mais de 2.147.483.647 elementos.
$a = 0..9
$a.Count
$a.Length
10
10
Posição
Devolve o número de dimensões na matriz. A maioria das matrizes no PowerShell têm uma dimensão, apenas. Mesmo quando pensa que está a construir uma matriz multidimensional; como o seguinte exemplo:
$a = @(
@(0,1),
@("b", "c"),
@(Get-Process)
)
[int]$r = $a.Rank
"`$a rank: $r"
$a rank: 1
A construção de uma matriz verdadeiramente multidimensional, em PowerShell, requer a assistência do Quadro .Net. Como no exemplo seguinte:
[int[,]]$rank2 = [int[,]]::new(5,5)
$rank2.rank
2
Métodos de matrizes
Limpar
Define todos os valores dos elementos ao valor predefinido do tipo de elemento da matriz. O método Clear() não repõe o tamanho da matriz.
No exemplo a seguir $a está uma série de objetos.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
Neste exemplo, $intA é explicitamente dactilografado para conter inteiros.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach
Permite iterar sobre todos os elementos da matriz e executar uma determinada operação para cada elemento da matriz.
O método ForEach tem várias sobrecargas que realizam diferentes operações.
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 de objeto[]
Nota
A sintaxe requer o uso de um bloco de script. Parênteses são opcionais.
O exemplo a seguir mostra como se utiliza o método do foreach. Neste caso, a intenção é gerar o valor quadrado dos elementos na matriz.
Por favor, note que este método foi adicionado no PowerShell v4 e não está disponível em versões abaixo. Para versões anteriores, utilize o método pipelining para o Cmdlet ForEach-Object
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Tal como o -ArgumentList parâmetro de , o parâmetro permite a passagem de uma série de argumentos para um bloco de ForEach-Object arguments scripts configurado para aceitá-los.
ForEach (tipo de conversãoToType)
O ForEach método pode ser usado para lançar rapidamente os elementos para um tipo diferente; o exemplo a seguir mostra como converter uma lista de datas de cordas para [DateTime] escrever.
@("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 (nome de propriedade de cordas)
ForEach (propriedade de cordasName, objeto[] newValue)
O ForEach método também pode ser usado para recuperar rapidamente, ou definir valores de propriedade para cada item da 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 (método de cordaName)
ForEach (método de cordaName, argumentos de objeto[]
Por último, ForEach podem ser utilizados métodos para executar um método em cada item da coleção.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Tal como o -ArgumentList parâmetro de , o parâmetro permite a passagem de uma série de argumentos para um bloco de ForEach-Object arguments scripts configurado para aceitá-los.
Nota
A partir do Windows PowerShell 3.0 recuperando propriedades e executando métodos para cada item de uma coleção também pode ser realizado usando "Métodos de objetos escalares e coleções" Pode ler mais sobre isso aqui about_methods
Onde
Permite filtrar ou selecionar os elementos da matriz. O script deve avaliar qualquer coisa diferente: zero (0), corda $false vazia, ou $null para que o elemento apareça após oWhere
Há uma definição para o Where método.
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
O Expression bloco de scripts é necessário para filtragem, o mode argumento opcional permite capacidades de seleção adicionais, e o numberToReturn argumento opcional permite a capacidade de limitar quantos itens são devolvidos do filtro.
Nota
A sintaxe requer o uso de um bloco de script. 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
Estão disponíveis os seguintes modos de seleção.
Predefinição
O Default modo filtra os itens utilizando o bloco de Expression scripts.
Se numberToReturn for fornecido um, especifica o número máximo de itens a devolver.
# 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)
Nota
Tanto o modo como Default First o modo devolvem os numberToReturn primeiros itens e podem ser utilizados intercambiavelmente.
Ú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)
SkipUntil
O SkipUntil modo salta todos os objetos de uma coleção até que um objeto passe o filtro de expressão do bloco de scripts. Em seguida, devolve todos os itens de recolha restantes sem os testar. Apenas um item de passagem é testado
Isto significa que a recolha devolvida conterá itens de passagem e de não passagem que NÃO tenham sido testados.
O número de artigos devolvidos 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é que
O Until modo inverte o SkipUntil modo. Devolve todos os itens numa coleção até que um item passe a expressão do bloco de script. Uma vez que um item passa a expressão do bloco de scripts, o Where método para de processar itens.
Isto significa que receberá o primeiro conjunto de itens não-passíveis do Where método. Depois de um item passar, o resto NÃO será testado nem devolvido.
O número de artigos devolvidos 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
Nota
Ambos Until e operam sob a premissa de NÃO testar um lote de SkipUntil itens.
Untildevolve os itens ANTES do primeiro passe.
SkipUntildevolve todos os itens APÓS o primeiro passe, incluindo o primeiro item de passagem.
Dividir
O Split modo divide-se ou agrupa os itens de recolha em duas coleções separadas. Aqueles que passam a expressão do scriptblock, e os que não passam.
Se a numberToReturn for especificada, a primeira recolha conterá os itens de passagem, não excedendo o valor especificado.
Os restantes objetos, mesmo aqueles que passam o filtro de expressão, serão devolvidos 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
...
Pegue os membros de uma matriz
Para obter as propriedades e métodos de uma matriz, como a propriedade Comprimento e o método SetValue, utilize o parâmetro InputObject do cmdlet Get-Member.
Quando encaneia uma matriz Get-Member para, a PowerShell envia os itens um de cada vez e Get-Member devolve o tipo de cada item na matriz (ignorando duplicados).
Quando utilizar o parâmetro -InputObject, Get-Member retorna os membros da matriz.
Por exemplo, o seguinte comando recebe os membros da $a variável matriz.
Get-Member -InputObject $a
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 faz da matriz o segundo item numa variedade de matrizes. O Windows PowerShell canaliza as matrizes uma de cada vez e o Get-Member devolve os membros da matriz. Como os dois próximos exemplos.
,$a | Get-Member
,(1,2,3) | Get-Member
Manipular uma matriz
Pode alterar os elementos numa matriz, adicionar um elemento a uma matriz e combinar os valores de duas matrizes numa terceira matriz.
Para alterar o valor de um determinado elemento numa matriz, especifique o nome da matriz e o índice do elemento que pretende alterar e, em seguida, utilize 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 de índice 1) para 10, escreva:
$a[1] = 10
Também pode utilizar 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)
Pode utilizar 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
Nota
Quando utiliza o operador, o += PowerShell cria realmente uma nova matriz com os valores da matriz original e o valor acrescentado. Isto pode causar problemas de desempenho se a operação for repetida várias vezes ou se o tamanho da matriz for demasiado grande.
Não é fácil eliminar elementos de uma matriz, mas 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 $a matriz, com exceção do valor na posição de índice 2, escreva:
$t = $a[0,1 + 3..($a.length - 1)]
Para combinar duas matrizes numa única matriz, utilize o operador plus (+). O exemplo a seguir cria duas matrizes, combina-as e, em seguida, 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 eliminar uma matriz, atribua um valor de $null à matriz. O comando a seguir elimina a matriz na $a variável.
$a = $null
Você também pode usar o Remove-Item cmdlet, mas atribuir um valor $null de é mais rápido, especialmente para grandes matrizes.
Matrizes de zero ou um
A partir do Windows PowerShell 3.0, uma coleção de zero ou um objeto tem a propriedade Count and Length. Além disso, pode indexar-se a uma matriz de um objeto. Esta funcionalidade ajuda-o a evitar erros de script que ocorrem quando um comando que espera que uma coleção obtenha menos de dois itens.
Os exemplos que se seguem demonstram esta característica.
Objetos zero
$a = $null
$a.Count
$a.Length
0
0
Um objeto
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4