我有一个包含大量数据点的列表。 (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)
答案 0 :(得分:1)
你试过了吗?
$ list = $ oList.Items | MyFilter |选择{$ [“CHGTaskFacility”]},{$ [“CHGTicketNumber”]}
在美元符号后添加下划线。出于某种原因,_不会出现在上面的代码中。
/帕维尔
答案 1 :(得分:0)
我认为代码应该是:
$list = $oList.Items | MyFilter | Select CHGTaskFacility,CHGTicketNumber
你写它的方式,意味着你试图输入强制转换,[ ]
之间的任何类型。
所以很困惑。
CHGTaskFacility和CHGTicketNumber是$ list对象的属性,因此选择CHGTaskFacility,CHGTicketNumber
足以让Powershell选择它们。
更新:
我认为过滤器代码可能不正确:
filter MyFilter {if ($_."CHGTaskRegion" -eq "Syracuse") {$_}}