![](/img/trans.png)
[英]SharePoint Online - Move document library contents (files and folders)
[英]Move specifics files from a sharepoint library to an other
這是我的問題。 我上周在我的 sharepoint 基礎架構上發生了一起事件,許多文件已移至不同的錯誤庫。 我從 sql 中提取了所有這些壞文件並將此選擇導出到 csv。 現在我正在嘗試編寫一個腳本,以便將這些文件(及其元數據)移動到正確的庫中。
並做了這樣的事情:
##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.