Powershell-读取csv并写入SharePoint 2010项目。 100万件......慢

时间:2013-09-25 18:49:11

标签: powershell sharepoint-2010

我编写了一个PowerShell脚本来导入和读取csv文件,然后使用csv中的属性更新相应的SharePoint 2010文档库项目。

一切都很完美,但我需要用一百多万件物品来增加复杂性。我已经测试了5,000件物品,整个过程需要几个小时才能完成。按照这个速度,所有100万件物品需要花费一个月的时间。

有没有更好的方法来编写这个脚本,还是因为数量疯狂而陷入困境?我目前的脚本如下。请记住它正在工作......只是慢慢来。

    $xlCSV=6
    $xls='z:\shared\Metadata.xlsx'
    $csv='z:\shared\Metadata.csv'
    $xl=New-Object -com 'Excel.Application'
    $wb=$xl.workbooks.open($xls)
    $wb.SaveAs($csv,$xlCSV)
    $xl.displayalerts=$False

    $SPAssignment = Start-SPAssignment
    $SPWeb = Get-SPWeb "http://client.contoso.com" -AssignmentCollection $spAssignment
    $SPList = $SPWeb.Lists["Shared Documents"]

    foreach($i in Import-CSV 'z:\shared\Metadata.csv')
    {
    $SPItem = $SPList.Items | Where { $_["Name"] -eq $i."Document Name" }
    $SPItem["Metadata1"] = $i."META 1"
    $SPItem["Metadata2"] = $i."META 2"
    $SPItem["Metadata3"] = $i."META 3"
    $SPItem["Metadata4"] = $i."META 4"
    $SPItem["Metadata5"] = $i."META 5"
    $SPItem["Metadata6"] = $i."META 6"
    $SPItem["Metadata7"] = $i."META 7"
    $SPItem["Metadata8"] = $i."META 8"
    $SPItem.Update()
    }

    Stop-SPAssignment $SPAssignment
    $xl.quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
    $xl = $null
    Start-Sleep -s 10
    Remove-Item "z:\shared\Metadata.csv" -force

1 个答案:

答案 0 :(得分:0)

也许将其分解为 n 的csv数量,并使用后台作业并行运行相同的操作,有一个答案here。因此,将您的主力代码放入函数或脚本块中,并将每个后台作业传递给csv文件以进行上载。我目前无法访问sharepoint服务器来测试任何代码,但这可能就是你想要的。