Como criar um ArrayList de um Array em PowerShell?

Tenho uma lista de ficheiros numa matriz. Eu quero enumerar esses arquivos, e remover arquivos específicos dele. Obviamente eu não posso remover itens de uma matriz, então eu quero usar um ArrayList. Mas o seguinte não funciona para mim:

$temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($temp)

Onde $temp é uma matriz.

Como posso conseguir isso?

 15
Author: Matt, 2009-03-06

2 answers

Também não consigo Pôr aquele construtor a trabalhar. No entanto, isto parece funcionar:
# $temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($null)
$resourceFiles.AddRange($temp)

Você também pode passar um inteiro no construtor para definir uma capacidade inicial.

O que queres dizer quando dizes que queres enumerar os ficheiros? Porque não filtras os valores desejados numa nova matriz?

Editar:

Parece que você pode usar o construtor do array assim:

$resourceFiles = New-Object System.Collections.ArrayList(,$someArray)

Repara na vírgula. Eu acredito que o que está acontecendo é que quando você chame um método. NET, você sempre passa parâmetros como um array. PowerShell desemboca esse array e passa-o para o método como parâmetros separados. Neste caso, não queremos que o PowerShell desfaça o array; queremos passar o array como uma única unidade. Agora, o operador de vírgula cria arrays. Então o PowerShell desfaz o array, então nós criamos o array novamente com o operador de vírgula. Penso que é isso que está a acontecer.

 31
Author: dan-gph, 2016-01-05 01:23:47

Provavelmente a versão mais Curta:

[System.Collections.ArrayList]$someArray

Também é mais rápido porque não chama relativamente caro New-Object.

 22
Author: Roman Kuzmin, 2011-08-16 06:29:44