我 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,因为没有其他方法起作用。
-在
$Context.Load($Web.Lists)
行下添加了
$Context.Load($Web.Webs)
行
-在
$Subweb
行下添加了这三行
$Context.Load($Subweb)
$Context.Load($Subweb.Lists)
$Context.executeQuery()
我不确定是哪一行/几行做的;我只是添加了它想要的内容,直到代码运行为止,稍后我将不得不尝试注释掉一些内容,看看是否所有这 4 行都是必要的。但是你现在有了。代码有效!