4

同じサイトコレクション内のあるドキュメントライブラリから別のドキュメントライブラリに最大10,000個のファイルを移動する必要があります。これを行うには、PowerShellが最善の手段であると思います。

私は次の記事を見つけました:http://blog.isaacblum.com/2011/10/04/spfilecollection-class-copy-files-to-another-document-library/#respondこれを行うための手段を提案しましたが私はmこのスクリプトをどのように適応させるかわからない(このプロジェクトでPowershellに初めて触れるようになりました)。

私は無駄に次のことを試みました:

$PSSnapin = Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue | Out-Null
clear

$org = "hhttp://farm/sitecollection/Document Library Source/Forms/AllItems.aspx"
$dest = "hhttp://farm/sitecollection/Document Library Destination/Forms/AllItems.aspx"

$orgLibrary = (Get-SPWeb $org).Folders["Documents"]
$destLibrary = (Get-SPWeb $dest).Folders["Documents"]
$destFiles = $destLibrary.Files
foreach ($file in $orgLibrary.Files)
{
    $curFile = $file.OpenBinary()
    $destURL = $destFiles.Folder.Url + "/" + $file.Name
    $destFiles.Add($destURL, $curFile, $true)
}

これを行う別の方法はありますか?SharePoint2010ではなくMOSS2007とPowershell2.0を使用していることに注意してください。

更新/半回答:

以下のx0nの投稿によると、これはSharePoint 2007ではサポートされていません(2010のみ)。私はこのスレッドの外で次のアドバイスを受け取りました。これは適切であり、将来的に他の人を助けるはずです。

残念ながら、SharePoint 2010の管理シェル(PowerShellスナップインおよび関連するコマンドレット)はMOSS 2007と互換性がなく、そのバージョンのSharePoint用にMicrosoftから直接利用できるコマンドレットはありません。つまり、MOSS 2007でPowerShellを引き続き使用できますが、STSADMまたはSharePointオブジェクトモデルを直接使用する独自のコマンドレットを作成するか、MOSS2007互換を使用する必要があります。サードパーティからのコマンドレット。Gary Lapointeのブログで、MOSS 2007用の優れたPowerShellコマンドレット(http://blog.falchionconsulting.com/)や、CodePlex.com、TechNet Script Repository、POSHCodeなどのコマンドレットをアップロードする場所を確認することをお勧めします。 .org、またはhttp://get-spscripts.com/

4

1 に答える 1

4

Microsoft.SharePoint.PowerShellスナップインはSharePoint2010専用であり、SharePoint2007サーバーでは使用できません。

率直に言って、これを行う最も簡単な方法は、Internet Explorerを開き、ソースドキュメントライブラリに移動して、「エクスプローラービュー」を開くことです。すべてのドキュメントを選択し、コピーします(ctrl + c)。別のIEウィンドウを開き、ターゲットドキュメントライブラリに対して同じことを行って貼り付けます(ctrl + v)。

エクスプローラービューで開かない場合は、コピー/貼り付けに使用しているマシンで「WebClient」サービスが実行されていることを確認してください。Windows 2008 R2を実行している場合、「デスクトップエクスペリエンス」機能を追加することを決定しない限り、このサービスは利用できません。代わりに、WebClientサービスを備えたWindows 7マシンを見つける方がはるかに簡単です(ただし、実行されていることを確認してください)。

アップデート:

そうは言っても、スクリプトはおそらくそこに約80%あり、2010年のスナップインは実際には必要ありません。現在、これをテストすることはできません(申し訳ありません)が、約99%正しいはずです:

[reflection.assembly]::loadwithpartialname("microsoft.sharepoint") > $null

$org = "http://farm/sitecollection/sourcedoclib" 
$dest = "http://farm/sitecollection/targetdoclib" 

$site = new-object microsoft.sharepoint.spsite $org
$web = $site.openweb()

$srcLibrary = $web.Lists["sourcedoclib"] 
$destLibrary = $web.Lists["targetdoclib"] 

$destFiles = $destLibrary.Folders["Archived"]

foreach ($item in $srcLibrary.Items) 
{ 
   if ($item.File) {
        $curFile = $item.file.OpenBinary() 
        $destURL = $destFiles.Folder.Url + "/" + $item.file.Name 
        $destFiles.Add($destURL, $curFile, $true)
    }
} 

幸運を。

于 2012-07-17T01:35:20.550 に答える