Blog链接:​https://blog.51cto.com/13969817

作为Office 365的管理员,实时了解和掌控存储在SharePoint的数据结构,大小,对于我们有效管理数据是非常关键的,比如某个Site Collection里存储的数据量过多,那么哪些Folder的文件size过多或者过大,存储需要优化,都需要我们认真思考的,或者我们组织结构变更,数据存储也需要从一个位置变更为另一个位置,那么数据的搬迁前后的数据校验也是重要一个环节,档案能否正常打开,数据size是否准确等等。

基于这些管理场景,今天给大家分享一下如何获取Folder以及其中每个文档的size。

具体操作步骤如下所示:

1.      获取Office 365 credentials,如下命令:$Cred= Get-Credential

2.      获取网站URL,如下命令:$SiteURL= ​​https://mvptrainingcn.sharepoint.com/sites/Contoso_China​

Microsoft 365 开发:如何通过脚本来获取文件夹和文档大小_获取文件夹大小

3.      获取Folder以及每个document的size,如下命令:

Microsoft 365 开发:如何通过脚本来获取文件夹和文档大小_SharePoint Online_02

$Cred = Get-Credential
$SiteURL = "https://mvptrainingcn.sharepoint.com/sites/Contoso_China"
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
$Web = $Ctx.Web
#$RootFolder = $Web.RootFolder
#$Ctx.Load($RootFolder)
#$Ctx.ExecuteQuery()
$id = New-Guid
$reportFile = $("C:\Users\jzliu\Documents\DocumentSize_“ + $id +".csv")
New-Item $reportFile -ItemType File
Add-Content $reportFile $('Type,Name,Size(KB)')
Function Get-SPOFolderSize([Microsoft.SharePoint.Client.Folder]$Folder)
{
Try
{
$Ctx.Load($Folder.Files)
$Ctx.Load($Folder.Folders)
$Ctx.ExecuteQuery()
$FolderSize = 0
ForEach($File in $Folder.Files | Where {-Not($_.Name.EndsWith(".aspx"))})
{
$Ctx.Load($File.Versions)
$Ctx.ExecuteQuery()
$VersionSize=0
If($File.Versions.Count -ge 1)
{
$VersionSize = $File.Versions | Measure-Object -Property Size -Sum | Select-Object -expand Sum
}
$OriginalFileSize = $File.Length + $VersionSize
$FolderSize += $OriginalFileSize
$FileSize = [Math]::Round((($File.Length) + $VersionSize)/1KB, 2)
If($FileSize -gt 0)
{
Write-host "`tSize of the File '$($File.Name)' "$FileSize
Add-Content $reportFile $('File,' + $File.Name + ',' + $($FileSize))
}
}
If($FolderSize -gt 0)
{
Write-host -f Yellow "Total Size of the Folder '$($Folder.ServerRelativeUrl)' (KB): " -NoNewline
$FolderSize= [Math]::Round($FolderSize/1KB, 2)
Write-host $FolderSize
Add-Content $reportFile $('Folder,' + $Folder.ServerRelativeUrl + ',' + $($FolderSize))
}
ForEach($Folder in $Folder.Folders | Where {-Not($_.Name.StartsWith("_") -or $_.Name -eq "Forms")})
{
Get-SPOFolderSize $Folder
}
}
Catch [System.Exception]
{
Write-Host -f Red "Error:"$_.Exception.Message
}
}
Function Get-WebSize([Microsoft.SharePoint.Client.Web]$subWeb)
{
Try
{
$SubRootFolder = $subWeb.RootFolder
$Ctx.Load($SubRootFolder)
$Ctx.ExecuteQuery()
Get-SPOFolderSize -Folder $SubRootFolder
$list = $subWeb.Webs
$Ctx.Load($list)
$Ctx.ExecuteQuery()
ForEach($subsubweb in $list)
{
Get-WebSize $subsubweb
}
}
Catch [System.Exception]
{
Write-Host -f Red "Error:"$_.Exception.ToString()
}
}
Get-WebSize $Web
#Get-SPOFolderSize -Folder $RootFolder



4.      返回结果如下:

Microsoft 365 开发:如何通过脚本来获取文件夹和文档大小_document size_03

5.      同时也会生成excel文件,通过设置过滤规则,仅仅显示文件夹的size,如下所示:

Microsoft 365 开发:如何通过脚本来获取文件夹和文档大小_document size_04

如果查看具体的单个文档的size,取消过滤即可,若大家日后有相类似的需求,希望本文能给大家提供帮助,或者大家有类似的需求,可以线下联系我。