2012-07-17 78 views
4

我有一個需要從一個文檔庫移到〜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只)的支持。我recevied以下建議這個線程,這是有關外,並應幫助別人的未來:

不幸的是SharePoint 2010中的命令行管理程序(這是PowerShell的 管理單元和相關的cmdlet)不與MOSS 2007兼容 有沒有爲 版本的SharePoint的可直接從微軟的cmdlet。這也就意味着,你仍然可以使用 PowerShell和MOSS 2007,但你要麼將不得不編寫直接使用STSADM或SharePoint對象模型 自己的cmdlet,或者你將不得不使用MOSS 2007兼容的cmdlet 來自第三方。我建議查看Gary Lapointe的博客 許多優秀的PowerShell cmdlet,用於MOSS 2007 (http://blog.falchionconsulting.com/),或者人們上傳 cmdlet的地方,如CodePlex.com,TechNet腳本庫, POSHCode.org,或http://get-spscripts.com/

回答

4

我並不感到驚訝,你無處可去:Microsoft.SharePoint.PowerShell管理單元僅適用於SharePoint 2010,並且不適用於SharePoint 2007服務器。

坦率地說,要做到這一點最簡單的方法就是打開IE瀏覽器,定位到源文檔庫並打開「資源管理器視圖」。選擇所有文件,然後複製(ctrl + c)。打開另一個IE窗口併爲目標文檔庫執行相同的操作並粘貼(ctrl + v)。

如果無法在資源管理器視圖中打開,請確保您用於複製/粘貼的機器運行「WebClient」服務。如果您運行的是Windows 2008 R2,除非您決定添加「桌面體驗」功能,否則此服務不可用。這是一個更容易找到在Windows 7機器代替,這將有WebClient服務

更新(但要確保它運行。):

這就是說,你的劇本大概是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) 
    } 
} 

好運。

+0

這就是我們以前的做法,但不幸的是,這是一個反覆出現的過程,可能在本月底之前跨越30多個文檔庫 - 是否有一個用於MOSS的PowerShell庫,可用於完成上述操作? – Codingo 2012-07-17 01:44:31

+0

無論如何,您不應該修改腳本_that_以使其在2007年運行。讓我看看它。 – x0n 2012-07-17 02:08:58

+0

我試圖實現這一點,但我收到以下每個文件在庫(它不動),任何想法?錯誤是:您無法在空值表達式上調用方法。 At line:20 char:23 + $ destFiles.Add <<<<($ destURL,$ curFile,$ true) + CategoryInfo:InvalidOperation:(Add:String)[],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull – Codingo 2012-07-17 03:38:20

相關問題