2016-04-14 12 views
0

Nachdem ich meine Workstation kürzlich auf Windows10 aktualisiert habe, habe ich alle meine alten Skripte überprüft und es scheint, dass sich IndexOf anders verhält.Powershell5 IndexOf Verhalten geändert - Vorschläge?

In PS4 arbeitete diese fein:

$fullarray = $permissions | %{ 
    $obj = new-object psobject 
    $obj | add-member -name Group -type noteproperty -value $_.Account.AccountName 
    $obj | add-member -name Access -type noteproperty -value $_.AccessRights 
    $obj 
} 
$array = {$fullarray}.Invoke() 
# Convert array to list from which we can remove items 
$arraylist = [System.Collections.ArrayList]$array 
# Remove admin groups/users 
$ExcludeList | % { 
    $index = ($arraylist.group).IndexOf($_) 
    If ($index -gt -1) { 
     $arraylist.RemoveAt($index) | Out-Null 
    } 
} 

jedoch in PS5 die IndexOf gibt nur -1 für alle Werte. Ich konnte nicht einen Weg finden, um es überhaupt mit Arraylisten zu bekommen arbeiten - zu bekommen, dass jetzt in PS5 arbeiten ich diese Flickschusterei fix haben:

$array = {$fullarray}.Invoke() 
# Convert array to list from which we can remove items 
$arraylist = [Collections.Generic.List[Object]]($array) 
# Remove admin groups/users 
ForEach ($HideGroup in $ExcludeList) { 
    $index = $arraylist.FindIndex({$args[0].Group -eq $HideGroup}) 
    If ($index -gt -1) { 
     $arraylist.RemoveAt($index) # | Out-Null 
    } 
} 

Jede Idee, warum hat sich das geändert, und wenn Sie eine haben Bessere Lösung, die sehr geschätzt würde!

Antwort

1

ich weiß nicht, die Antwort, warum Sie verschiedene Verhaltensweisen mit ArrayList.IndexOf() sehen, aber ich würde vorschlagen, Where-Object statt mit, was Sie tun:

$fullarray = $permissions | ForEach-Object { 
    $obj = new-object psobject 
    $obj | add-member -name Group -type noteproperty -value $_.Account.AccountName 
    $obj | add-member -name Access -type noteproperty -value $_.AccessRights 
    $obj 
} 
$filteredarray = $fullarray | Where-Object { $Excludelist -notcontains $_.Group } 
+0

Gut Schrei. Das Skript war im Laufe der Zeit in Evolution und ich denke, ich ursprünglich zu einer ArrayList geändert, wie ich auch nach anderen Kriterien (wie wenn ein Benutzer Mitglied war) entfernen und auch ein Element hinzufügen wollte, sobald ich die unerwünschten Gruppen entfernt hatte , aber ich kann sehen, dass es immer noch einfacher ist, diese Methode zu verwenden. Danke – Scepticalist

+0

Das könntest du auch mit 'Where-Object' machen –