2009-03-06 16 views
13

Ich habe eine Liste von Dateien in einem Array. Ich möchte diese Dateien aufzählen und bestimmte Dateien daraus entfernen. Natürlich kann ich keine Objekte aus einem Array entfernen, also möchte ich einen ArrayList verwenden. Aber die für mich folgende funktioniert nicht:Wie erstellt man eine ArrayList aus einem Array in PowerShell?

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

Wo $temp ein Array ist.

Wie kann ich das erreichen?

Antwort

27

Ich kann diesen Konstruktor auch nicht funktionieren. Dies scheint jedoch zu funktionieren:

Sie können auch eine Ganzzahl im Konstruktor übergeben, um eine Anfangskapazität festzulegen.

Was meinen Sie, wenn Sie sagen, dass Sie die Dateien aufzählen möchten? Warum können Sie die gewünschten Werte nicht einfach in ein neues Array filtern?

Edit:

Es scheint, dass Sie das Array Konstruktor wie diese verwenden:

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

Hinweis das Komma. Ich glaube, was passiert, wenn Sie eine .NET-Methode aufrufen, übergeben Sie Parameter immer als Array. PowerShell entpackt dieses Array und übergibt es als separate Parameter an die Methode. In diesem Fall möchten wir nicht, dass PowerShell das Array entpackt. Wir wollen das Array als eine Einheit übergeben. Jetzt erstellt der Komma-Operator Arrays. PowerShell entpackt das Array und erstellt das Array erneut mit dem Komma-Operator. Ich denke, das ist was passiert.

+0

Wie filtern Sie die Elemente? –

+0

@Mark, können Sie weitere Informationen darüber geben, wie Sie entscheiden möchten, welche Dateien entfernt werden sollen. Was liefert Get-ResourceFiles auch? –

+0

Ich habe eine Textdatei mit relativen Pfaden darin. Nachdem ich ein Verzeichnis aufgelistet habe, möchte ich prüfen, ob es in der Datei vorhanden ist, und wenn es nicht existiert, entfernen Sie es aus der Liste. Get-ResourceFiles gibt nur einen Pfad als String zurück –

18

Wahrscheinlich ist die kürzeste Version:

[System.Collections.ArrayList]$someArray 

Es ist auch schneller, weil es nicht relativ teuer New-Object nicht nennen.

+1

Um eine Instanz zu bekommen, wäre das eigentlich [System.Collections.ArrayList] $ someArray = @(), was in Powershell 3.0 funktioniert, aber ich habe nicht überprüft, ob Powershell immer ArrayList als Array-Instanz verwendet. – npjohns

Verwandte Themen