我正在尝试更新SharePoint列表,因为它的大小和使事情更快我想要使用DataTable。
$webURL = "http://test/test"
$listName = "Test List"
$web = Get-SPWeb $webURL
$list = $web.Lists[$listName]
$items = $list.items.GetDataTable() | select LinkTitle, Failure_x0020_Step
foreach($item in $items)
{
if(($item.LinkTitle -eq "PC111"))
{
$item.Failure_x0020_Step = "Failure Test"
$item.Update()
}
else {}
}
运行脚本时出现此错误:
方法调用失败,因为[System.Data.DataRow]不包含名为“Update”的方法。 + CategoryInfo:InvalidOperation:(Update:String)[],RuntimeException + FullyQualifiedErrorId:MethodNotFound
我确实没有DataTable(下面的更改),但更喜欢DataTable。
$items = $list.items
if(($item["Computer"] -eq "PC111"))
$item["Failure Step"] = "Failure Test"
答案 0 :(得分:2)
当您调用Update()时,即尝试将更新应用于DataTable,而不是SharePoint列表。他们是分开的。您需要从SharePoint检索实际的列表项并进行更新。
我不确定为什么DataTable会让你更快,但如果你想保留它:
$webURL = "http://test/test"
$listName = "Test List"
$web = Get-SPWeb $webURL
$list = $web.Lists[$listName]
$items = $list.items.GetDataTable() | select LinkTitle, Failure_x0020_Step, ID
foreach($item in $items)
{
if(($item.LinkTitle -eq "PC111"))
{
$realItem = $list.GetItemById($item.ID)
$realItem['Failure_x0020_Step'] = "Failure Test"
$realItem.Update()
}
else {}
}