Powershell:更新共享点列表

Powershell: Update a Sharepoint List

我正在使用 PowerShell 通过 CSV 文件在 SharePoint 中创建一个列表。我能够创建列表并成功添加项目,尽管我需要在更新列表之前验证我添加到列表中的项目(行)不存在于列表中。

在代码中我无法正确获取 $ItemExist。它总是 returns 一个 Null 值。 ($MaxItems 当前的值为 2,因为列表“list_DLs”中有 2 个项目)。

(我已经检查了网站上的所有其他帖子是否存在相同问题,但没有找到解决方法)

$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $AdminName, $Pass
$Path_SpFiles = "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI"
Add-Type -path "$Path_SpFiles\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -path "$Path_SpFiles\Microsoft.SharePoint.Client.dll"
# ------- Connect to SharePoint Site and fetch List Items ----------------
[Net.ServicePointManager]::SecurityProtocol = 'TLS11','TLS12','ssl3'
$site = "https://xyz.sharepoint.com/sites/mco"
$context = New-Object Microsoft.SharePoint.Client.ClientContext($site)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($AdminName, $Pass)
$context.Credentials = $credentials
$ListName="list_DLs"
$list = $context.Web.Lists.GetByTitle($ListName)
$query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(5000) 
$items = $list.GetItems($query)
$context.Load($items)
$context.ExecuteQuery()
$MaxItems = $items.count
$SourceFile = "C:\Temp\list_DLs.csv"
$CSVData = Import-CSV -path $SourceFile
foreach ($row in $CSVData)
    {
    #----------------------------------------------
    #Check if the item has previously been added
    if ($MaxItems -ne 0)
        {
        $ItemExist = $items | where{$_.Title -eq $row.PrimarySmtpAddress}
        if($ItemExist -ne $null) {Continue}
        }
    #----------------------------------------------
    $ListItemInfo = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation
    $Item = $list.AddItem($ListItemInfo)
    $Item["Title"] = $row.PrimarySmtpAddress
    $Item.Update()
    $Context.ExecuteQuery()
    Break
    }

我知道 $items 被正确返回,因为如果我 运行 这段代码遍历项目我就能正确地看到它们。我只是无法让 $ItemExist 正常工作

ForEach ($item in $items)
   {
   $b = $item["Title"]
   $b
   Break
   }

您可以使用 CAML 查询来检查该项目是否已在列表中。

CAML 查询:

$caml="
    <View>  
         <Query> 
             <Where><Eq><FieldRef Name='Title' /><Value Type='Text'>1</Value></Eq></Where> 
         </Query> 
     </View>
 "
    
 $ItemExist = Get-PnPListItem -List $targetList -Query $caml

我的测试结果: