2017-05-18 43 views
0

調用遞歸函數(RecursiveWebs()$webinfo.Count是1遞歸函數的執行過程中之前,Count增加,但只要遞歸函數完成,控制返回到主功能,$webinfo.Count webinfo`功能每次運行時:再次降低到1遞歸函數 - 數組值消失

function RecursiveWebs($web) { 
    $Properties = @{ 
     Title = $web.Title 
     URL = $web.Url 
    } 

    $webinfo += New-Object PSObject -Property $properties  
    foreach ($w in $web.Webs) { 
     if ($w.Webs.Count -gt 0) { 
      RecursiveWebs $w 
     } 
    } 
} 

$global:webinfo = @() 
$sites = Get-SPOSite -Limit All 
foreach ($site in $sites) { 
    Write-Host $site.Url 
    try { 
     $Properties = @{ 
      Title = $site.Title 
      URL = $site.Url    
      NoOfSubsites = $site.Webs.Count   
     }  

     $webinfo += New-Object PSObject -Property $properties 

     if ($site.Webs.Count -gt 0) { 
      RecursiveWebs $site 
     }   
    } catch { 
     Write-Host $_ -ForegroundColor Red 
    } 
} 
+0

你「復位」'$全球?你究竟想要完成什麼? –

+0

您的'RecursiveWebs'函數中的'$ webinfo'與腳本的頂級範圍中的'$ global:webinfo'不是同一個變量。你需要在你的函數中使用'$ global:webinfo',以使這些變化在函數之外可見。更好的是,完全避免範圍問題,例如將數組作爲參數傳遞並通過該引用添加到範圍問題。 – BACON

+0

@ MathiasR.Jessen我沒有重置$ webinfo。我的理解是,如果變量作用域是全局變量,它應該在主遞歸函數和內部遞歸函數中是相同的變量 – Farhan

回答

0

替換$ webinfo與$全球:在代碼webinfo無處不在,它的伎倆