【问题标题】:Using "Select" in SharePoint list query在 SharePoint 列表查询中使用“选择”
【发布时间】:2015-02-22 17:27:42
【问题描述】:

我有一个包含大量数据点的列表。 (130 列,31000 项)。我运行某些脚本来挖掘数据和/或更新该信息。我用来加快处理时间的一个技巧是在开始时将整个列表拉入一个数组。这允许 powershell 查询数组,而不是每次都返回列表。

在这些脚本中,我通常只搜索少数几个字段,因此提取所有 130 多个列效率低下,我希望寻找一种方法来限制要提取的字段。

在下面的脚本中,一切正常,直到我添加了查询的“选择”部分。然后我收到“无法索引到 System.Management.Automation.PSObject 类型的对象”的错误。

任何指针都非常感谢!

$oList = $Web2.Lists["Forecasting data source"]
$aList = $Web.Lists["ArrayTest"]

filter MyFilter {if ($_["CHGTaskRegion"] -eq "Syracuse") {$_}}
$list = $oList.Items | MyFilter | Select ["CHGTaskFacility"],["CHGTicketNumber"]

$list | ForEach-Object {
    $ListItem = $aList.Items.Add()
    $ListItem["Title"] = [string]$_["CHGTaskFacility"]
    $ListItem["Number"] = [string]$_["CHGTicketNumber"]
    $ListItem.Update()
}

编辑: 这是事后的事,但我看到了我的这篇旧帖子,并认为值得再次阅读。正确的方法实际上并不是拉入整个列表然后搜索它。正确的方法是首先使用 CAML 查询简单地获取您想要的项目。像这样:

$spqQuery = New-Object Microsoft.SharePoint.SPQuery 
$spqQuery.Query =  
    "   <Where> 
        <Eq> 
            <FieldRef Name='CHGTaskRegion' /> 
            <Value Type='File'>Syracuse</Value> 
        </Eq> 
    </Where>" 
$spqQuery.ViewFields = "<FieldRef Name='CHGTaskFacility' /><FieldRef Name='CHGTicketNumber' />" 
$spqQuery.ViewFieldsOnly = $true 
$splListItems = $splList.GetItems($spqQuery)

【问题讨论】:

    标签: powershell select sharepoint caml


    【解决方案1】:

    我认为代码应该是:

    $list = $oList.Items | MyFilter | Select CHGTaskFacility,CHGTicketNumber
    

    您编写它的方式意味着您尝试进行类型转换,[ ] 之间的任何内容都是类型。 于是它就糊涂了。

    CHGTaskFacility 和 CHGTicketNumber 是 $list 对象的属性,因此 Select CHGTaskFacility,CHGTicketNumber 足以让 Powershell 选择它们。

    更新:

    我认为过滤器代码可能不正确:

    filter MyFilter {if ($_."CHGTaskRegion" -eq "Syracuse") {$_}} 
    

    【讨论】:

    • 我去掉了那些列名的括号和引号。不幸的是,没有区别。同样的错误。 $list = $oList.Items |我的过滤器 |选择 CHGTaskFacility,CHGTicketNumber
    • 好的,可能是过滤器的问题,你试过filter MyFilter {if ($_."CHGTaskRegion" -eq "Syracuse") {$_}}
    • 过滤器工作正常。正如我在原始帖子中所说,整个脚本在我添加 select 语句之前一直有效。
    【解决方案2】:

    你试过了吗:

    $list = $oList.Items |我的过滤器 |选择 {$["CHGTaskFacility"]}, {$["CHGTicketNumber"]}

    在美元符号后添加下划线。由于某种原因 _ 没有出现在上面的代码中。

    /帕维尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多