2016-04-14 15 views
0

Son zamanlarda iş istasyonumu Windows10'a yükseltmiş oldum Tüm eski komut dosyalarını kontrol ettim ve IndexOf'un farklı şekilde davrandığı görülüyor. Powershell5 IndexOf davranış değişikliği - öneri?

PS4 bu iyi çalıştı:
$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 
    } 
} 

Ancak PS5 içinde IndexOf sadece tüm değerler için -1 döndürür. Eğer bir varsa

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

neden bu konuda herhangi bir fikir değiştirdi ve: - Ben bunu hiç Dizi Listeleri ile çalışmak için bir yol bulamadı şimdi bu kludge düzeltme olduğunu PS5 içinde işe gitmek için Daha iyi düzeltmek çok takdir olurdu!

cevap

1

Sana ArrayList.IndexOf() farklı davranışlar bakın neden cevabını bilmiyorum, ama bunun yerine ne yaptığını ait Where-Object kullanarak öneririm:

$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

İyi not. Komut dosyası evrimleşme sürecindeydi ve sanırım orijinal olarak bir ArrayList olarak değiştirdim, çünkü diğer ölçütlere (örneğin, bir kullanıcı zaten varsa) dayanarak kaldırmak istedim ve istenmeyen grupları kaldırdığımda bir öğe ekledim Ancak, bu yöntemi kullanmanın hala daha kolay olabileceğini görebiliyorum. Teşekkürler – Scepticalist

+0

Bunu 'Nerede-Nesne' ile yapabilirdiniz –