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

Powershell中Where-Object筛选PnP列表项返回null的问题排查求助

你遇到的问题核心是管道执行顺序与对象结构变更导致的,符合你描述的现象(筛选null返回所有,筛选固定值无结果)的最常见原因如下:

  • 你将Where-Object筛选命令放在了Select-Object之后:Select-Object会对管道传递的对象做投影裁剪,执行后原Get-PnPListItem返回的列表项对象会被重构,仅保留你指定的两个属性,不再包含FieldValues属性,因此访问$_.FieldValues返回$null,自然无法匹配到具体值。

解决方案1:调整管道顺序(本地筛选)

先对完整的列表项对象做筛选,再做自定义字段投影,示例代码如下:

Connect-PnPOnline -Url [SomeURL] -UseWebLogin

Get-PnPListItem -List "workproretentiontest" `
# 先基于完整对象做筛选
| Where-Object {$_.FieldValues.FileLeafRef -eq "201700007"} `
# 筛选完成后再裁剪输出字段
| Select-Object `
    @{label="Filename"; expression={$_.FieldValues.FileRef}}, `
    @{label="FileLeafRef"; expression={$_.FieldValues.FileLeafRef}}

解决方案2:使用服务端筛选(效率更高,推荐)

针对大列表场景,直接使用Get-PnPListItem自带的-Filter参数在服务端完成筛选,不需要拉取全量列表项到本地,性能提升明显:

Connect-PnPOnline -Url [SomeURL] -UseWebLogin

Get-PnPListItem -List "workproretentiontest" -Filter "FileLeafRef eq '201700007'" `
| Select-Object `
    @{label="Filename"; expression={$_.FieldValues.FileRef}}, `
    @{label="FileLeafRef"; expression={$_.FieldValues.FileLeafRef}}

调试验证方法

如果上述方案仍未解决,可先执行以下命令打印所有项的FileLeafRef值,确认字段值是否符合预期:

Get-PnPListItem -List "workproretentiontest" | ForEach-Object {
    Write-Host "当前项FileLeafRef值:$($_.FieldValues.FileLeafRef)"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:03