Powershell 脚本,用于获取给定共享点在线站点中的列表、列表项、库和文档的数量

问题描述 投票:0回答:1

我 4 天前才开始使用 PowerShell,所以这可能只是一个我不理解的简单语法问题。我在这里拼凑了一些代码:

#sharepoint site url
$Site = Get-SPOSite https://______________________ 

#variables
$CountDocumentItems = 0
$CountDocumentLibray = 0
$CountListItems = 0
$CountList = 0
$Results = @()

#Get Credentials to connect to SharePoint Admin Center
$Cred = Get-Credential

Function Get-SPOWeb($WebURL){    
    
    #Setup credentials to connect    
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)    
    
    #Get Web information and subsites    
    $Context = New-Object Microsoft.SharePoint.Client.ClientContext($WebURL)    
    $Context.Credentials = $Credentials    
    $Web = $Context.Web    
    $Context.Load($Web)    
    $Context.Load($Web.Webs)    
    $Context.executeQuery()    
    
    #Iterate through each subsite in the current web    
    foreach ($Subweb in $Web.Webs)    {        
        #Get the web object        
        $Subweb        
        
        #Call the function recursively to process all subsites underneath the current web        
        Get-SPOWeb($Subweb.url)    
    }
}

$AllWebs = Get-SPOWeb $Site.Url
foreach ($item in $AllWebs) {
    
    foreach($list in $item.Lists) {
        if ($list.BaseType -eq "DocumentLibrary") {          
            $CountDocumentLibray = $CountDocumentLibray + 1
            $CountDocumentItems = $list.ItemCount + $CountDocumentItems
        }
        else {
            $CountList = $CountList+1
            $CountListItems = $list.ItemCount + $CountListItems
        }
    }
    $Results += New-Object PSObject -Property @{'Site Title' = $item.Title 
        'Document Library Count' = $CountDocumentLibray
        'Document Count' = $CountDocumentItems
        'List Count' = $CountList
        'List Item Count' = $CountListItems 
    }
    $CountDocumentItems = 0
    $CountDocumentLibray = 0
    $CountListItems = 0
    $CountList = 0
}
#$site.Dispose()
$Results | Select 'Site Title', 'Document Library Count', 'Document Count', 'List Count', 'List Item Count' | Format-Table

当我运行它时,它根本不喜欢

foreach($list in $item.Lists)
线。我交替收到“集合尚未初始化”错误,并带有下划线
$list
$item.Lists
。我尝试将
$item.Lists
设置为变量并循环遍历该变量,但出现同样的问题。当我只是在第一个 foreach 中输入
$item.
时,它确实给了我
Lists
作为选项。我不太确定从这里该去哪里。

整个 foreach 部分来自试图演示通过 SP 站点而不是 SPO 进行循环的人,所以也许我只是想完全使用错误的属性。但我还不够了解,无法理解我真正需要什么。

*编辑添加,在连续出现一大堆相同的错误之后,我确实得到了一个包含网站标题列表的表格输出,所以

$item.Title
似乎工作正常。但所有计数都是 0,因为没有其他方法起作用。

powershell sharepoint sharepoint-online
1个回答
0
投票

-在

$Context.Load($Web.Lists)
 行下添加了 
$Context.Load($Web.Webs)

-在

$Subweb

行下添加了这三行
$Context.Load($Subweb)
$Context.Load($Subweb.Lists)
$Context.executeQuery()

我不确定是哪一行/几行做的;我只是添加了它想要的内容,直到代码运行为止,稍后我将不得不尝试注释掉一些内容,看看是否所有这 4 行都是必要的。但是你现在有了。代码有效!

© www.soinside.com 2019 - 2024. All rights reserved.