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!
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
Das könntest du auch mit 'Where-Object' machen –