2017-05-18 44 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无处不在,它的伎俩