SharePoint 2013 Powershell-将文件从一个网站集复制到另一个网站

时间:2018-07-30 15:09:37

标签: powershell sharepoint sharepoint-2013

请有人可以协助您解决上述问题吗?

我想将一个文件从共享点网站集中的特定文件夹复制到另一个共享点网站集中(但仍在同一Web应用程序中)的另一个库(同名)。 我对Powershell的经验很少,曾经尝试过许多Google搜索,但似乎找不到任何有效的方法。

下面是我尝试做的一个示例(很多Write-Host尝试找出正在发生的情况),底部显示了错误消息。

Add-PSSnapIn "Microsoft.SharePoint.PowerShell"

## 
#Set Static Variables 
## 

$SourceWebURL = "http://WebAppURL/sites/Area/Master" 
$SourceLibraryTitle = "Web" 
$DestinationWebURL = "http://WebAppURL/sites/OtherSiteName" 
$DestinationLibraryTitle = "Web"
$FileName = "Resources.aspx"

## 
#Begin Script 
## 

$sWeb = Get-SPWeb $SourceWebURL 
$sList = $sWeb.Lists | ? {$_.Title -eq $SourceLibraryTitle} 
$dWeb = Get-SPWeb $DestinationWebURL 
$dList = $dWeb.Lists | ? {$_.title -like $DestinationLibraryTitle} 

$DestFolder = $dList.Files

$RootFolder = $sList.RootFolder
Write-Host " line 25 -- " $RootFolder  
$collfiles1 = $RootFolder.Files
Write-Host " line 27 -- "$collfiles1
Write-Host " line 28 -- "$DestFolder

Write-Host " line 30 -- "$str = $DestinationWebURL"/"$DestinationLibraryTitle"/"$FileName 
Write-Host  " line 31 -- "$collfiles1.Count
for($i = 0 ; $i -lt $collfiles1.Count ; $i++)
{
    Write-Host " line 34 -- "$collfiles1[$i].Name
    ##Write-Host $FileName
    if($collfiles1[$i].Name -eq $FileName)
    {
    ##  $str = $DestinationWebURL.Url + $DestinationLibraryTitle + "/" + $FileName
        $str = $DestinationWebURL+"/" +$DestinationLibraryTitle+"/"
        Write-Host " line 40 -- "$str
        Write-Host " line 41 -- "$collfiles1[$i]
        $FiletoCopy = $collfiles1[$i].Name
        Write-Host " line 43 -- " $FiletoCopy
        $FiletoCopy.CopyTo($str,$true)
    }
}
Write-Host "Script Completed"

下面的示例给出了错误

Cannot find an overload for "CopyTo" and the argument count: "2".
At line:44 char:3
+         $FiletoCopy.CopyTo($str,$true)
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

如果有人可以指出正确的方向,那将非常有帮助。

预先感谢, 伊恩。

2 个答案:

答案 0 :(得分:0)

以下PowerShell供您参考,将文件从网站集中的一个库复制到具有字段的另一个网站集中的另一个库。

Add-PSSnapIn "Microsoft.SharePoint.PowerShell"

## 
#Set Static Variables 
## 

$SourceWebURL = "http://WebAppURL/sites/Area/Master" 
$SourceLibraryTitle = "Web" 
$DestinationWebURL = "http://WebAppURL/sites/OtherSiteName" 
$DestinationLibraryTitle = "Web"
$FileName = "Resources.aspx"

## 
#Begin Script 
## 

$sWeb = Get-SPWeb $SourceWebURL 
#$sList = $sWeb.Lists | ? {$_.Title -eq $SourceLibraryTitle} 
$dWeb = Get-SPWeb $DestinationWebURL 
#$dList = $dWeb.Lists | ? {$_.title -like $DestinationLibraryTitle} 

$SourceFile=$sWeb.GetFile($SourceWebURL+"/"+$SourceLibraryTitle+"/"+$FileName)
$TargetFolder = $dWeb.GetFolder($DestinationLibraryTitle)
#Copy File from the Source
$NewFile = $TargetFolder.Files.Add($SourceFile.Name, $SourceFile.OpenBinary(),$True)

#Copy Meta-Data from Source
Foreach($Field in $SourceFile.Item.Fields)
{
    If(!$Field.ReadOnlyField)
    {
        if($NewFile.Item.Fields.ContainsField($Field.InternalName))
        {
            $NewFile.Item[$Field.InternalName] = $SourceFile.Item[$Field.InternalName]
        }
    }
}
#Update
$NewFile.Item.UpdateOverwriteVersion()

Write-host "Copied File:"$SourceFile.Name

参考:Copy Files Between Document Libraries in SharePoint using PowerShell

答案 1 :(得分:0)

因此,对于大文件,如果文件大小大于50MB。 @LZ_MSFT提及的脚本可能永远无法复制该文件。在这方面,您需要将文件切成小块。如果文件大小大于50MB,这里是PS,可以通过分块从源复制到目标。该脚本的要点是,它正在使用客户端,因此可以与SP在线和本地一起使用。

/subsystem=logging/file-handler=my-handler:add(file={path=myclass.log, relative-to=jboss.server.log.dir}, append=true, autoflush=true)
/subsystem=logging/logger=your.package.MyClass:add(handlers=[my-handler], level=INFO, use-parent-handlers=false)