2013-04-20 25 views
5

Mam dziwną sytuację z tą funkcją PowerShell. Powinno się zwrócić obiekt ArrayList, ale w przypadku, gdy pętla dodaje tylko 1 element do tablicy ArrayList, funkcja zwraca element SPList zamiast obiektu Oczekiwany obiekt ArrayList. Zastanawiam się, dlaczego PowerShell zachowuje się w ten sposób.Funkcja nie zwraca oczekiwanego obiektu

function Get-ContentOrganizerRules 
(
    [System.String]$siteUrl = "http://some.sharepoint.url" 

) 
{ 
    Write-Host -ForegroundColor Gray "Searching for Content Organizer Rules: " $siteUrl 


    # ArrayList to hold any found DataConn Libs 
    [System.Collections.ArrayList]$CORules = New-Object System.Collections.ArrayList($null) 


    $lists = Get-SPWeb $siteUrl | 
     Select -ExpandProperty Lists | 
     Where { $_.GetType().Name -eq "SPList" -and $_.hidden } 

    foreach($list in $lists) 
    { 
     #Write-Host $list ; 

     foreach($contenType in $list.ContentTypes){ 
      if($contenType -ne $null){ 
       if($contenType.Id.ToString() -eq "0x0100DC2417D125A4489CA59DCC70E3F152B2000C65439F6CABB14AB9C55083A32BCE9C" -and $contenType.Name -eq "Rule") 
       { 
        $CORules.Add($list)>$null; 
        Write-Host -BackgroundColor Green -ForegroundColor White "Content Organizer Rule found: " $list.Url>$null; 
       } 
      } 
     } 
    } 

    return $CORules; 

} 

Jest to kod wywołujący:

$CORulesResults = Get-ContentOrganizerRules $web.URL; 
        if($CORulesResults.Count -gt 0){ 
         $Results.AddRange($CORulesResults); 
        } 

Odpowiedz

6

Jest niejawna rurociąg tam i rurociągi są przyzwyczajenie do „rozwinąć” tablice, kolekcje i arraylists jeden poziom.

Spróbuj tego:

return ,$CORules 
+0

'przyzwyczajenie do" rozwijania "tablic" co masz na myśli? Chcesz rozwinąć, nie rozwijasz, rozwijasz tablice, cokolwiek innego? – Neolisk

+3

Old English. Oznacza to, że "dostaną każdą szansę". – mjolinor

1

Albo można wymusić zmienną $ CORulesResult do tablicy z [Array] przed

[Array]$CORulesResults = Get-ContentOrganizerRules $web.URL; 
         if($CORulesResults.Count -gt 0){ 
          $Results.AddRange($CORulesResults); 
         } 
0

miałem podobny problem, jak również, gdy użyłem [System. Collections.ArrayList] zamiast normalnych tablic o stałym rozmiarze. Zwrócony obiekt nie był elementem tablicy, na który liczyłem, ale całą tablicą i był niepłodny, z wyjątkiem jednego elementu, który chciałem zwrócić. Porozmawiaj o tym, jak zepsuć stos.

Rozwiązanie było proste: Zatrzymany za pomocą [System.Collections.ArrayList]

Oto w jaki sposób zadeklarować i obsługiwać $ CORules.

$CORules = @() 

... 

$CORules = $CORules + $list 

Viva le Bash!

Powiązane problemy