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

SharePoint Online PnP PowerShell日期查询异常:返回全部项求解决

问题排查与解决方案

首先,你的查询返回全部项,大概率是两个原因:一是CAML查询的时间匹配逻辑不对,二是查询的XML格式/转义问题导致SharePoint没有正确解析筛选条件。

核心问题分析

你当前生成的$Today是带精确时分秒毫秒的UTC时间戳,但列表中Aviseringsdatum字段的时间值几乎不可能和这个精确值完全一致——哪怕是今日的那条数据,它的时间部分也可能是当天的某个其他时刻,不是你执行脚本时的精确时间。加上你设置了IncludeTimeValue='TRUE',这会要求完全匹配日期+时间,自然匹配不到目标项;如果查询语法还有小问题,SharePoint就会直接忽略筛选条件,返回所有项。

修复方案

方案1:匹配今日日期(忽略时间部分)

如果你只需要筛选日期为今日的项,不管具体时间,修改CAML查询,忽略时间匹配即可:

# 获取今日的日期部分(不带时间),格式化为SharePoint认可的格式
$TodayDate = (Get-Date).ToString("yyyy-MM-dd")
# 使用Here-String编写CAML,避免转义问题
$query = @"
<View>
  <Query>
    <Where>
      <Eq>
        <FieldRef Name='Aviseringsdatum' />
        <Value IncludeTimeValue='FALSE' Type='DateTime'>$TodayDate</Value>
      </Eq>
    </Where>
  </Query>
  <ViewFields>
    <FieldRef Name='Title' />
    <FieldRef Name='Aviseringsdatum' />
    <FieldRef Name='Avtalsansvarig' />
  </ViewFields>
</View>
"@

$ListItems = Get-PnPListItem -List "Avtal" -Query $query

方案2:匹配今日全天的时间范围(包含所有今日的时间点)

如果你的字段需要考虑时间,但要覆盖今日00:00到23:59的所有项,可以用Geq和Leq组合筛选:

# 获取今日0点的UTC时间
$startOfDay = (Get-Date).Date.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")
# 获取今日23:59:59的UTC时间
$endOfDay = (Get-Date).Date.AddDays(1).AddSeconds(-1).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")

$query = @"
<View>
  <Query>
    <Where>
      <And>
        <Geq>
          <FieldRef Name='Aviseringsdatum' />
          <Value IncludeTimeValue='TRUE' Type='DateTime'>$startOfDay</Value>
        </Geq>
        <Leq>
          <FieldRef Name='Aviseringsdatum' />
          <Value IncludeTimeValue='TRUE' Type='DateTime'>$endOfDay</Value>
        </Leq>
      </And>
    </Where>
  </Query>
  <ViewFields>
    <FieldRef Name='Title' />
    <FieldRef Name='Aviseringsdatum' />
    <FieldRef Name='Avtalsansvarig' />
  </ViewFields>
</View>
"@

$ListItems = Get-PnPListItem -List "Avtal" -Query $query

额外注意点

  • 用PowerShell的**Here-String(@" ... "@)**编写CAML查询,比手动转义<为&lt;更不容易出错,可读性也更强。
  • 确认Aviseringsdatum是字段的内部名称(不是显示名称)——如果内部名称不一样,查询也会失效。你可以在SharePoint列表设置的字段详情页里看到内部名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:49:17