【发布时间】: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