带 IN 子句的 Powershell 中的 CAML

CAML in Powershell with IN CLause

我使用的是 SP 2013 on-premises,我想通过将多个 ID 传递到列表然后仅返回标题字段来查询项目列表。这是在 Powershell 中执行的。我将以下内容用作 ViewXml:

        <View>
         <ViewFields>
         <FieldRef Name='Title'/>
        </ViewFields>
 <Query>
  <Where>
   <In>
    <FieldRef Name='ID' />
       <Values>
        <Value Type='Counter'>1131</Value>
        <Value Type='Counter'>478</Value>
        <Value Type='Counter'>360</Value>
       <Values>
   </In>
  </Where>
 </Query>
</View>

我在 运行 $ctx.executeQuery();
时得到以下结果 使用“0”个参数调用 "ExecuteQuery" 的异常:“无法完成此操作。

请重试。"

这是代码的其余部分,减去变量定义和添加客户端 dll 的位

$pwd = Read-Host -Prompt "Enter password" -AsSecureString  
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)  
$ctx.Credentials = New-Object System.Net.NetworkCredential($userId, $pwd)

$vFields = "<Value Type='Counter'>1131</Value><Value Type='Counter'>478</Value><Value Type='Counter'>360</Value>";

try{  
    $lists = $ctx.web.Lists ;
    $list = $lists.GetByTitle($ListName);  
    $query = New-Object Microsoft.SharePoint.Client.CamlQuery;
    $xmlCAML = "<View><ViewFields><FieldRef Name='Title'/></ViewFields><Query><Where><In><FieldRef Name='ID'/><Values>$vFields<Values></In></Where></Query></View>";
    write-host $xmlCAML -ForegroundColor Yellow
    $query.ViewXml = $xmlCAML

    $listItems = $list.GetItems($query);  
    $ctx.load($listItems);       
    $ctx.executeQuery();  

    foreach($listItem in $listItems)  
    {  
        Write-Host "Title - " $listItem["Title"]  
    }  
}  
catch{  
    write-host "$($_.Exception.Message)" -foregroundcolor red  
}

如果您还没有对此进行排序,这只是一次击键修复,您只是未能正确关闭 CAML 中的 <Values>...</Values> 元素。需要:

<View>
     <ViewFields>
         <FieldRef Name='Title'/>
     </ViewFields>
 <Query>
  <Where>
   <In>
    <FieldRef Name='ID' />
       <Values>
        <Value Type='Counter'>1131</Value>
        <Value Type='Counter'>478</Value>
        <Value Type='Counter'>360</Value>
       </Values> <!-- <== Here :) -->
   </In>
  </Where>
 </Query>
</View>