2016-04-14 16 views
0

最近私のワークステーションをWindows10にアップグレードしましたが、私はすべての古いスクリプトをチェックしていましたが、IndexOfの動作が異なっているようです。 PS4でPowershell5インデックス動作が変更されました - ご提案ですか?

これがうまく働いた:PS5でしかし

$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 
    } 
} 

IndexOfメソッドを単に-1を返したすべての値のために。私はそれがすべてで配列リストで作業を取得する方法を見つけることができませんでした - それは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 
    } 
} 

に任意のアイデアを、あなたが持っている場合より良い修正がそれほど高く評価されるでしょう!

答えて

1

私はあなたが​​と異なる振る舞いを参照してください、なぜ答えを知らないが、私はWhere-Objectを使用しての代わりに、あなたがやっていることを示唆している:

$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

良い叫びを。 スクリプトは進化していて、ArrayListに変更されたと思います。ユーザーがすでにメンバーだった場合など、他の基準に基づいて削除したい場合や、不要なグループを削除した後にアイテムを追加したい場合もありますしかし、私はそれがまだこの方法を使用する方が簡単かもしれないことがわかります。ありがとう – Scepticalist

+0

あなたは 'Where-Object'でもそうすることができます –

関連する問題