在同一网站集中的文档库之间移动文件

时间:2012-07-17 01:23:55

标签: sharepoint powershell sharepoint-2007

我需要将〜10,000个文件从一个文档库移动到同一网站集中的另一个文档库。我相信powershell是实现这一目标的最佳方式。

我发现了以下文章:http://blog.isaacblum.com/2011/10/04/spfilecollection-class-copy-files-to-another-document-library/#respond提出了这样做的方法,但是我不确定如何调整这个脚本(我正在通过这个项目首次接触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)
}

有没有其他方法可以做到这一点?请注意,我使用的是MOSS2007和Powershell 2.0,而不是SharePoint 2010。

更新/半答案:

根据下面的x0n帖子,SharePoint 2007(仅限2010)不支持此功能。我在这个线程之外接受了以下建议,这是相关的,并且将来应该帮助其他人:

  

不幸的是SharePoint 2010的管理外壳(它是PowerShell   管理单元和关联的cmdlet)与MOSS 2007和   Microsoft没有直接提供的cmdlet   SharePoint版本。这意味着你仍然可以使用   PowerShell与MOSS 2007,但你要么必须写   您自己的使用STSADM或SharePoint对象模型的cmdlet   直接,或者您将不得不使用兼容MOSS 2007的cmdlet   来自第三方。我建议查看Gary Lapointe的博客   很多适用于MOSS 2007的PowerShell cmdlet   (http://blog.falchionconsulting.com/),或人们上传的地方   cmb,如CodePlex.com,TechNet脚本存储库,   POSHCode.org,或http://get-spscripts.com/

1 个答案:

答案 0 :(得分:4)

我并不感到惊讶你无处可去:Microsoft.SharePoint.PowerShell管理单元仅适用于SharePoint 2010,并且在SharePoint 2007服务器上不可用。

坦率地说,最简单的方法是打开Internet Explorer,导航到源文档库并打开“资源管理器视图”。选择所有文档,然后复制(ctrl + c)。打开另一个IE窗口,为目标文档库做同样的事情并粘贴(ctrl + v)。

如果无法在资源管理器视图中打开,请确保您用于复制/粘贴的计算机正在运行“WebClient”服务。如果您运行的是Windows 2008 R2,则除非您决定添加“桌面体验”功能,否则此服务不可用。找到一台Windows 7机器会更容易,它将具有WebClient服务(但要确保它正在运行。)

<强>更新

那就是说,你的脚本大约有80%,并不真正需要2010 snapin。我现在无法测试这个(对不起),但它应该大约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)
    }
} 
祝你好运。