使用PnP PowerShell批量更新匹配txt内容的SharePoint列表项咨询
问题原因
你的脚本报错核心是两个问题:
Set-PnPListItem的-Identity参数没有传入有效值:你写的代码里-Identity后面直接跟了下一个参数-Values,相当于传了空值;之前尝试用的$_.Server也不生效,因为foreach循环内当前迭代对象是$line,不存在$_这个管道上下文对象,且-Identity要求传入列表项ID、ListItem实例对象,不能直接传Server字段的文本值。- 缺少匹配逻辑:循环读取txt的服务器名后,没有查询列表中Server字段和该名称匹配的条目,直接执行更新自然找不到目标。
你提到的通过CAML查询传入$line参数、直接筛选Server字段匹配的列表项的思路完全可行,在列表条目量大的时候性能优于全量拉取的方案。
修正方案(CAML查询版)
直接替换脚本里的对应内容即可运行,注意修改标注的占位符:
$pathRead = "D:\CertScipts\Servrar_Prod.txt" Import-Module "C:\PNP\SharePointPnPPowerShell2019\3.6.1902.2\SharePointPnPPowerShell2019.psd1" if ($null -eq $cred) { $cred = Get-Credential } # 替换为你实际的SharePoint站点地址,原脚本中的"-"为无效占位符 Connect-PnPOnline "https://你的租户/你的站点地址" -Credentials $cred $list = Get-PnPList "Certifikat Auto" foreach($serverName in Get-Content $pathRead) { # 跳过txt中的空行 if([string]::IsNullOrWhiteSpace($serverName)){ continue } # 处理服务器名前后多余空格 $serverName = $serverName.Trim() # 构造CAML查询匹配当前服务器名对应的条目 $camlQuery = @" <View> <Query> <Where> <Eq> <FieldRef Name='Server' /> <Value Type='Text'>$serverName</Value> </Eq> </Where> </Query> </View> "@ # 查询匹配项并更新 $matchedItems = Get-PnPListItem -List $list -Query $camlQuery foreach($item in $matchedItems) { Set-PnPListItem -List $list -Identity $item.Id -Values @{"Farm" = "PROD"} } }
注意事项
- 如果你的Server字段是查找类型、选项类型,或者字段内部名称不是
Server,需要对应修改CAML里的FieldRef的Name属性、Value的Type属性:比如查找类型字段要把Type改为Lookup,使用字段实际内部名替换Server。 - 如果需要批量更新大量条目,可以给
Set-PnPListItem加上-UpdateType SystemUpdate参数,避免修改条目修改时间、触发不必要的流或工作流。
备选方案(全量内存匹配版)
如果列表总条目数低于5000,可以一次性拉取所有列表项到内存匹配,减少请求次数:
# 连接站点获取列表后,一次性拉取所有列表项 $allItems = Get-PnPListItem -List $list -PageSize 1000 # 读取txt中所有有效服务器名,存入哈希表做快速匹配 $serverSet = @{} Get-Content $pathRead | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | ForEach-Object { $serverSet[$_.Trim()] = $true } # 遍历条目匹配更新 foreach($item in $allItems) { $currentServer = $item["Server"]?.ToString().Trim() if($serverSet.ContainsKey($currentServer)) { Set-PnPListItem -List $list -Identity $item.Id -Values @{"Farm" = "PROD"} } }
内容的提问来源于stack exchange,提问作者Gatewarden
相关产品推荐
相关产品推荐

