Недавно обновив мою рабочую станцию до Windows10, я проверял все мои старые сценарии, и, похоже, IndexOf ведет себя по-другому.Powershell5 IndexOf изменилось поведение - предложения?
В PS4 это работало отлично:
$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
}
}
Однако в PS5 IndexOf просто возвращает -1 для всех значений. Я не мог найти способ, чтобы получить его работу с ArrayLists на всех - чтобы получить, чтобы работать в PS5 теперь у меня есть этот ляп исправление:
$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
}
}
Любая идея о том, почему это изменилось, и если у вас есть лучшее исправление, которое было бы высоко оценено!
Хорошо крика. Скрипт был вовремя эволюционирует, и я думаю, что я изначально был изменен на ArrayList, так как я также хотел удалить на основе других критериев (например, если пользователь уже был участником) и добавить элемент, как только я удалил ненужные группы , но я вижу, что все же проще использовать этот метод. Спасибо – Scepticalist
Вы можете сделать это с помощью 'Where-Object', а также –