最近将我的工作站升级到 Windows10 后,我一直在检查我所有的旧脚本,似乎 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 一起工作 - 现在我有这个 kludge 修复让它在 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
}
}
任何关于为什么会发生变化的想法,如果您有更好的解决方案,将不胜感激!