簡體   English   中英

將特定文件從 sharepoint 庫移動到另一個

[英]Move specifics files from a sharepoint library to an other

這是我的問題。 我上周在我的 sharepoint 基礎架構上發生了一起事件,許多文件已移至不同的錯誤庫。 我從 sql 中提取了所有這些壞文件並將此選擇導出到 csv。 現在我正在嘗試編寫一個腳本,以便將這些文件(及其元數據)移動到正確的庫中。

我試過以下這個例子: https://www.sharepointdiary.com/2016/03/copy-files-between-document-libraries-using-powershell-in-sharepoint.html

並做了這樣的事情:

##Script copy de fichiers d'une librairie à une autre

添加-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

Start-Transcript -Path c:\temp\transcript.txt

#Variables
$WebURL="http://MySPurl"
$ListingTESTQual = Import-Csv -Path C:\temp\TestQualifMoveSP.csv -Delimiter ';' -Encoding UTF8
$SourceFileTEST = $ListingTESTQual.URLactuelle

$TargetLibrary = "TempoCourrier_MED"

 
#Get Objects
$Web = Get-SPWeb $WebURL
$SourceFileTEST = $Web.GetFile($SourceFileTEST)


#Copie Meta-Data
#$ItemPREV = $FilePREV.Item
#$ItemFSS = $FileFSS.Item

foreach($fichiers in $ListingTESTQual)

{
if ($ListingTESTQual.NomLot -match "PRE")
        {
        $FilePREV = $TargetLibrary.Files.Add($SourceFileTEST.Name, $SourceFileTEST.OpenBinary(), $true) 
        $ItemPREV = $FilePREV.item      
        $ItemPREV["Created"] = $SourceFileTEST.TimeCreated.ToLocalTime()
        $ItemPREV["Modified"] = $SourceFileTEST.TimeLastModified.ToLocalTime()
        $ItemPREV["Author"] = $SourceFileTEST.Author
        $ItemPREV["Editor"] = $SourceFileTEST.ModifiedBy
        $ItemPREV["STATUT"] = $SourceFileTEST.STATUT
        $ItemPREV["DateNumerisation"] = $SourceFileTEST.DateNumerisation
        }

else {
     if ($ListingTESTQual.NomLot -match "FSS")
        {
        $FileFSS = $TargetLibrary.Files.Add($SourceFileTEST.Name, $SourceFileTEST.OpenBinary(), $true)
        $ItemFSS = $FileFSS.Item
        $ItemFSS["Created"] = $SourceFileTEST.TimeCreated.ToLocalTime()
        $ItemFSS["Modified"] = $SourceFileTEST.TimeLastModified.ToLocalTime()
        $ItemFSS["Author"] = $SourceFileTEST.Author
        $ItemFSS["Editor"] = $SourceFileTEST.ModifiedBy
        $ItemFSS["STATUT"] = $SourceFileTEST.STATUT
        $ItemFSS["DateNumerisation"] = $SourceFileTEST.DateNumerisation
        }      
        
     }
}

 

#Update
$ItemPREV.UpdateOverwriteVersion()
$ItemFSS.UpdateOverwriteVersion()

我的 CSV 看起來像這樣:

NomLot;URLactuelle;NomFichier;URLdestination    
PRE_Batch1.xml;http://ActualURL1;FileName1.pdf;http://DestinationURL1
FSS_Batch2.xml;http://ActualURL2;FileName2.pdf;http://DestinationURL2

我一運行腳本就收到了這條消息:

Exception lors de l'appel de «OpenBinary» avec «0» argument(s): «Le nom de
fichier ou de dossier contient des caractères non autorisés. Utilisez un autre
nom.»
Au caractère Ligne:6 : 9
+         $FilePREV = $TargetLibrary.Files.Add($SourceFileTEST.Name, $S ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SPException

Impossible d’appeler une méthode dans une expression Null.
Au caractère Ligne:7 : 9
+         $ItemPREV["Created"] = $SourceFileTEST.TimeCreated.ToLocalTim ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

好像語法有問題,我試過尋找解釋但找不到

任何想法?

它甚至沒有進入我的循環,這肯定是錯誤的!

您的模塊可能不會在這里導入:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

刪除 Erroraction SilentlyContinue 並修復此錯誤,不要繼續使用 Add-PSSnapin,因為這是舊方法。 導入模塊的新模塊是

Import-Module xyz

為了復制帶有元數據和版本歷史的文件。 這是執行此操作的腳本。 如果兩個庫的內容類型相同,那么這將更新所有字段。

    Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
    
    #Custom Function to Copy Files from Source Folder to Target
    Function Copy-Files($SourceFolder, $TargetFolder)
    {
        write-host "Copying Files from:$($SourceFolder.URL) to $($TargetFolder.URL)"
        #Get Each File from the Source
        $SourceFilesCollection = $SourceFolder.Files
        
        #Iterate through each item from the source
        Foreach($SourceFile in $SourceFilesCollection)
        {
            $CountFileVersions = $SourceFile.Versions.Count
            #Get the created by and created
            $CreatedBy = $SourceFile.Author;
            #Convert the "TimeCreated" property to local time
            $CreatedOn = $SourceFile.TimeCreated.ToLocalTime();
            #Loop Through Each File Version
            for ($i = 0; $i -le $CountFileVersions; $i++){
                #Initialize variables
                $SourceProp;
                $FileStream;
                $ModifiedBy;
                $ModifiedOn;
                $VersionComment = "";
                $MajorVer = $False;
                #If Index is not the Last Published Version
                if ($i -lt $CountFileVersions){
                        #Get all versions file, history, properties, createdBy, checkInComment
                        $fileSourceVer = $SourceFile.Versions[$i];
                        $SourceProp = $fileSourceVer.Properties;

                        $ModifiedBy = If ($i -eq 0) {$CreatedBy}  ELSE {$fileSourceVer.CreatedBy};
                        $ModifiedOn = $fileSourceVer.Created.ToLocalTime();
                        $VersionComment = $fileSourceVer.CheckInComment;
                        $MajorVer = If ($fileSourceVer.VersionLabel.EndsWith("0")) {$True} Else {$False}
                        $FileStream = $fileSourceVer.OpenBinaryStream();
                }
                else {
                        #Get current versions file, history, properties, createdBy, checkInComment
                        $ModifiedBy = $SourceFile.ModifiedBy;
                        $ModifiedOn = $SourceFile.TimeLastModified.ToLocalTime();
                        $SourceProp = $SourceFile.Properties;
                        $VersionComment = $SourceFile.CheckInComment;
                        $MajorVer = If ($SourceFile.MinorVersion -eq 0) {$True} Else {$False}
                        $FileStream = $SourceFile.OpenBinaryStream();
                }
                #URL library destination
                $DestFileURL = $TargetFolder.URL + "/" + $SourceFile.Name;
                #Add initial File to destination library         
                $DestFile = $TargetFolder.Files.Add($DestFileURL, $FileStream, $SourceProp, $CreatedBy, $ModifiedBy, $CreatedOn, $ModifiedOn, $VersionComment, $True);
                #Update all previous file versions
                $itmNewVersion = $DestFile.Item;
                $itmNewVersion["Author"] = $CreatedBy;
                $itmNewVersion["Editor"] = $ModifiedBy;
                $itmNewVersion["Created"] = $CreatedOn;
                $itmNewVersion["Modified"] = $ModifiedOn;
                $itmNewVersion.UpdateOverwriteVersion();
                
                #If Major Version Publish it
                if ($MajorVer){
                    $DestFile.Publish($strVerComment);
                }                 
            }
        
            Write-host "File:"$SourceFile.Name ." is uploaded successfully with version count:" $countVersions
        }
        
        #Process SubFolders
        Foreach($SubFolder in $SourceFolder.SubFolders)
        {
            if($SubFolder.Name -ne "Forms")
            {
                #Check if Sub-Folder exists in the Target Library!
                $NewTargetFolder = $TargetFolder.ParentWeb.GetFolder($SubFolder.Name)
    
                if ($NewTargetFolder.Exists -eq $false)
                {
                    #Create a Folder
                    $NewTargetFolder = $TargetFolder.SubFolders.Add($SubFolder.Name)
                }
                #Call the function recursively
                Copy-Files $SubFolder $NewTargetFolder
            }
        }
    }
    
    #Variables for Processing
    $WebURL="http://MySPurl/"
    $SourceLibrary ="SourceLibrary"
    $TargetLibrary = "DestinationLibrary"
    
    #Get Objects
    $Web = Get-SPWeb $WebURL
    $SourceFolder = $Web.GetFolder($SourceLibrary)
    $TargetFolder = $Web.GetFolder($TargetLibrary)
    
    #Call the Function to Copy All Files
    Copy-Files $SourceFolder $TargetFolder

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM