最近ワークステーションを 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 で動作させる方法がまったく見つかりませんでした。これを 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
}
}
これが変更された理由についてのアイデア、およびより良い修正があれば大歓迎です!