2

csv ファイルをインポートして読み取り、対応する SharePoint 2010 ドキュメント ライブラリ アイテムを csv にある属性で更新する PowerShell スクリプトを作成しました。

すべてが完璧に機能しますが、100 万を超えるアイテムでこれを行う必要があるという複雑さが増しています。私は 5,000 個のアイテムでテストしましたが、プロセス全体が完了するまでに数時間かかります。このレートでは、100 万以上のアイテムをすべて処理するには 1 か月以上かかります。

このスクリプトを書くためのより良い方法はありますか?それとも、アイテムの数が非常に多いために立ち往生していますか? 私の現在のスクリプトは以下です。動作していることを覚えておいてください...ゆっくりと。

    $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
4

1 に答える 1

0

おそらく、これをn個の csv に分割し、バックグラウンド ジョブを使用して同じ操作を並行して実行すると、ここに答えがあります。したがって、主力のコードを関数またはスクリプトブロックに入れ、各バックグラウンド ジョブに csv ファイルへのリンクを渡して、アップロードを実行します。現時点では、コードをテストするために共有ポイント サーバーにアクセスすることはできませんが、これはおそらくあなたが望むものです。

于 2013-09-25T20:15:11.960 に答える