You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell按指定日期范围统计OneDrive文件及文件夹数量

筛选指定日期范围的OneDrive文件/文件夹统计方案

要统计2011年3月3日至2022年8月31日之间创建的文件和文件夹,推荐在服务器端通过CAML查询过滤数据,减少本地处理压力,比客户端过滤更高效。以下是修改后的完整脚本:

$SiteURL = ""
$ListName = "Documents"
     
Connect-PnPOnline $SiteURL -Credentials $credential

# 定义目标日期范围
$startDate = [DateTime]"2011-03-03"
$endDate = [DateTime]"2022-08-31"

# 构建CAML查询,在服务器端筛选符合日期条件的项目
$camlQuery = @"
<View>
  <Query>
    <Where>
      <And>
        <Geq>
          <FieldRef Name='Created' />
          <Value Type='DateTime' IncludeTimeValue='FALSE'>$($startDate.ToString('yyyy-MM-dd'))</Value>
        </Geq>
        <Leq>
          <FieldRef Name='Created' />
          <Value Type='DateTime' IncludeTimeValue='FALSE'>$($endDate.ToString('yyyy-MM-dd'))</Value>
        </Leq>
      </And>
    </Where>
  </Query>
  <ViewFields>
    <FieldRef Name='FileLeafRef' />
    <FieldRef Name='Created' />
    <FieldRef Name='Modified' />
    <FieldRef Name='SMTotalFileStreamSize' />
    <FieldRef Name='FileRef' />
    <FieldRef Name='File_x0020_Type' />
  </ViewFields>
  <RowLimit>500</RowLimit>
</View>
"@

$global:counter = 0

# 获取符合条件的文件夹
$FolderItems = Get-PnPListItem -List $ListName -CamlQuery $camlQuery -ScriptBlock { 
    Param($items) 
    $global:counter += $items.Count; 
    Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity "获取列表项目:" -Status "已处理 $global:Counter / $($List.ItemCount) 个项目"
} | Where { $_.FileSystemObjectType -eq "folder" }

# 获取符合条件的文件
$FileItems = Get-PnPListItem -List $ListName -CamlQuery $camlQuery -ScriptBlock { 
    Param($items) 
    $global:counter += $items.Count; 
    Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity "获取列表项目:" -Status "已处理 $global:Counter / $($List.ItemCount) 个项目"
} | Where { $_.FileSystemObjectType -eq "File" }

# 输出统计结果
Write-Host "符合日期范围的文件夹总数: $($FolderItems.Count)"
Write-Host "符合日期范围的文件总数: $($FileItems.Count)"
Write-Host "符合日期范围的项目总数: $($FolderItems.Count + $FileItems.Count)"

关键说明

  • CAML查询优势:直接在SharePoint服务器端过滤数据,只返回符合日期条件的项目,避免拉取全量数据,大幅提升大列表场景下的运行效率。
  • 日期格式要求:SharePoint对DateTime类型的查询值要求使用yyyy-MM-dd格式,IncludeTimeValue='FALSE'表示忽略时间部分,匹配日期当天的所有项目。
  • 文件/文件夹区分:通过FileSystemObjectType属性分别过滤,实现文件和文件夹的单独统计。

备选方案(客户端过滤)

如果列表项目量较小,也可以直接在原有脚本的Where语句中添加日期条件,无需修改CAML:

$FolderItems = Get-PnPListItem -List $ListName -PageSize 500  -Fields "FileLeafRef", "Created","Modified", "SMTotalFileStreamSize","FileRef","File_x0020_Type" -ScriptBlock { 
    Param($items) 
    $global:counter += $items.Count; 
    Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity "获取列表项目:" -Status "已处理 $global:Counter / $($List.ItemCount) 个项目"
} | Where { 
    $_.FileSystemObjectType -eq "folder" -and 
    $_.Created -ge [DateTime]"2011-03-03" -and 
    $_.Created -le [DateTime]"2022-08-31" 
}

注意:大列表场景下不推荐客户端过滤,会导致脚本运行缓慢。

内容的提问来源于stack exchange,提问作者aasenomad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:01:29