SharePoint Online: PowerShell kullanarak Belge Kitaplıkları Arasında Dosya Kopyalama
Gereksinim: Dosyaları bir kitaplıktan diğerine kopyalamak için SharePoint Online PowerShell.
SharePoint Çevrimiçi Belge Kitaplığındaki Dosya Nasıl Kopyalanır?
SharePoint Online'da dosyaları kopyalamanın bir yolunu mu arıyorsunuz? Bu kılavuz, dosyaları siteleriniz, belge kitaplıklarınız veya klasörleriniz arasında hızlı ve kolay bir şekilde kopyalamak için "Kopyala" özelliğini nasıl kullanacağınızı gösterecektir. Ayrıca, SharePoint Online ortamınızdaki konumlar arasında dosya kopyalamak için PowerShell'i nasıl kullanacağınızı da göstereceğiz.
Modern deneyimi kullanarak dosyaları bir SharePoint Online kitaplığından diğerine kopyalayabilirsiniz. SharePoint Çevrimiçi Belge Kitaplığı'ndaki bir dosyayı şu şekilde kopyalayabilirsiniz:
Kopyalamak istediğiniz dosyaları içeren SharePoint Online belge kitaplığınıza gidin >> Kopyalamak istediğiniz dosyaları seçin >> Sağ tıklayın ve “Kopyala” menü öğesini seçin. Araç çubuğundaki “Kopyala” düğmesini de kullanabilirsiniz.
-
Dosyaları nereye kopyalamak istediğinizi seçmenizi sağlayan yeni bir pencere açılacaktır. Dosyanızın kopyalanması gereken hedef kitaplığı seçin. Geçerli kitaplığı, mevcut sitedeki herhangi bir kitaplığı ve hatta herhangi bir farklı site koleksiyonundaki kitaplığı seçebilirsiniz.
- Kütüphaneyi seçin ve dosyayı kopyalamaya başlamak için “Buraya Kopyala” düğmesine tıklayın.
Araç çubuğunda “Kopyalanıyor” mesajını göreceksiniz ve dosyanız hedef siteye anlık olarak kopyalanacaktır.
Aynı prosedür taşıma işlemleri için de geçerlidir.
"Kopyala" veya "Şuraya Taşı" sayfasında Hızlı erişim altında tarafınızı bulamıyor musunuz? “OneDrive'a Kısayol Ekle”yi kullanarak kitaplık kısayolunuzu OneDrive'a ekleyebilir ve ardından o kitaplığı seçmek için “Kopyala” sayfasındaki “Dosyalarım”ı tıklayabilirsiniz.
Dosyaları kopyaladığınızda, tarafından oluşturulan, değiştirilen meta veriler korunmaz. Ayrıca dosya kopyalandığında Sürüm geçmişi korunmaz. Move ise meta verileri ve sürümleri korur.
Sık sık SharePoint Online ortamınızdaki dosyaları başka konumlara kopyalamanız gerektiğini mi düşünüyorsunuz? PowerShell bu süreci hızlı ve kolay hale getirmenize yardımcı olabilir!
SharePoint Online: Belgeleri Kopyalamak için PowerShell
PowerShell, SharePoint Online'daki görevleri otomatikleştirmek için kullanabileceğiniz güçlü bir araçtır. SharePoint Online'da dosyaları kopyalamak için PowerShell'in nasıl kullanılacağını görelim. SharePoint Online belge kitaplığındaki bir dosyayı kopyalamak için PowerShell'i burada bulabilirsiniz:
Function Copy-File
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $SourceFileURL,
[Parameter(Mandatory=$true)] [string] $TargetFileURL
)
Try {
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
#Get the source file
$SourceFile =$Ctx.Web.GetFileByServerRelativeUrl($SourceFileURL)
$Ctx.Load($SourceFile)
$Ctx.ExecuteQuery()
#Copy File to destination
$SourceFile.CopyTo($TargetFileURL, $True)
$Ctx.ExecuteQuery()
Write-Host "File Copied from '$SourceFileURL' to '$TargetFileURL'" -F Green
}
Catch {
write-host -f Red "Error Copying File!" $_.Exception.Message
}
}
#Set Parameter values
$SiteURL="https://crescent.sharepoint.com/"
$SourceFileURL="/Project Documents/Active Users.xlsx"
$TargetFileURL="/Project Documents/Active UsersV2.xlsx"
#Call the function
Copy-File -SiteURL $SiteURL -SourceFileURL $SourceFileURL -TargetFileURL $TargetFileURL
Bu yöntem, verilen belgeyi meta veri alanlarıyla birlikte aynı belge kitaplığına veya aynı site içindeki farklı bir belge kitaplığına kopyalar (Hariç: Alanlar tarafından oluşturulan ve Değiştirilen alanlar - ve tabii ki sütunlar her iki kitaplıkta da bulunmalıdır)!
SharePoint Online: PowerShell'i kullanarak dosyaları site koleksiyonları arasında kopyalama
SharePoint Online'da dosyaları bir kitaplıktan diğerine kopyalamak için PowerShell'i burada bulabilirsiniz:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Function to Copy a File
Function Copy-SPOFile([String]$SiteURL, [String]$SourceFileURL, [String]$TargetFileURL)
{
Try{
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Copy the File
$MoveCopyOpt = New-Object Microsoft.SharePoint.Client.MoveCopyOptions
$Overwrite = $True
[Microsoft.SharePoint.Client.MoveCopyUtil]::CopyFile($Ctx, $SourceFileURL, $TargetFileURL, $Overwrite, $MoveCopyOpt)
$Ctx.ExecuteQuery()
Write-host -f Green "File Copied Successfully!"
}
Catch {
write-host -f Red "Error Copying the File!" $_.Exception.Message
}
}
#Set Config Parameters
$SiteURL="https://Crescent.sharepoint.com/sites/Marketing"
$SourceFileURL="https://Crescent.sharepoint.com/sites/Marketing/Shared Documents/Discloser Asia.doc"
$TargetFileURL="https://Crescent.sharepoint.com/Shared Documents/Discloser Asia.doc"
#Get Credentials to connect
$Cred= Get-Credential
#Call the function to Copy the File
Copy-SPOFile $SiteURL $SourceFileURL $TargetFileURL
PowerShell'i kullanarak Tüm Dosyaları Bir Belge Kitaplığı'ndan Diğerine Kopyalayın:
Bu sefer tüm dosyaları klasör-alt klasör yapılarıyla birlikte kopyalayalım.
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Function Copy-AllFiles
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.Folder] $SourceFolder,
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.Folder] $TargetFolder
)
Try {
#Get all Files from the source folder
$SourceFilesColl = $SourceFolder.Files
$Ctx.Load($SourceFilesColl)
$Ctx.ExecuteQuery()
#Iterate through each file and copy
Foreach($SourceFile in $SourceFilesColl)
{
#Get the source file
$SourceFile =$Ctx.Web.GetFileByServerRelativeUrl($SourceFile.ServerRelativeUrl)
$Ctx.Load($SourceFile)
$Ctx.ExecuteQuery()
#Copy File to destination
$TargetFileURL = $TargetFolder.ServerRelativeUrl+"/"+$SourceFile.Name
$SourceFile.CopyTo($TargetFileURL, $True)
$Ctx.ExecuteQuery()
Write-host -f Green "Copied File '$($SourceFile.ServerRelativeUrl)' to '$TargetFileURL'"
}
#Process Sub Folders
$SubFolders = $SourceFolder.Folders
$Ctx.Load($SubFolders)
$Ctx.ExecuteQuery()
Foreach($SubFolder in $SubFolders)
{
If($SubFolder.Name -ne "Forms")
{
#Prepare Target Folder
$TargetFolderURL = $SubFolder.ServerRelativeUrl -replace $SourceLibrary.RootFolder.ServerRelativeUrl, $TargetLibrary.RootFolder.ServerRelativeUrl
Try {
$Folder=$Ctx.web.GetFolderByServerRelativeUrl($TargetFolderURL)
$Ctx.load($Folder)
$Ctx.ExecuteQuery()
}
catch {
#Create Folder
if(!$Folder.Exists)
{
$Folder=$Ctx.Web.Folders.Add($TargetFolderURL)
$Ctx.Load($Folder)
$Ctx.ExecuteQuery()
Write-host "Folder Added:"$SubFolder.Name -f Yellow
}
}
#Call the function recursively
Copy-AllFiles -SiteURL $SiteURL -SourceFolder $SubFolder -TargetFolder $Folder
}
}
}
Catch {
write-host -f Red "Error Copying File!" $_.Exception.Message
}
}
#Set Parameter values
$SiteURL="https://crescent.sharepoint.com"
$SourceLibraryName="Project Documents"
$TargetLibraryName="Documents"
#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
#Get the source library and Target Libraries
$SourceLibrary = $Ctx.Web.Lists.GetByTitle($SourceLibraryName)
$Ctx.Load($SourceLibrary)
$Ctx.Load($SourceLibrary.RootFolder)
$TargetLibrary = $Ctx.Web.Lists.GetByTitle($TargetLibraryName)
$Ctx.Load($TargetLibrary)
$Ctx.Load($TargetLibrary.RootFolder)
$Ctx.ExecuteQuery()
#Call the function
Copy-AllFiles -SiteURL $SiteURL -SourceFolder $SourceLibrary.RootFolder -TargetFolder $TargetLibrary.RootFolder
SharePoint Online'da Dosya Kopyalamak için PnP PowerShell:
SharePoint Online belge kitaplığında bir dosyayı her seferinde kopyalamak sıkıcı olabilir! PowerShell kullanarak SharePoint Online'da dosya kopyalama işlemini nasıl otomatikleştireceğiniz aşağıda açıklanmıştır.
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/marketing"
$SourceURL= "Shared Documents/Discloser Asia.doc"
$TargetURL = "Shared Documents/Discloser Asia-v2.doc"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
#Copy File to same document library
Copy-PnPFile -SourceUrl $SourceURL -TargetUrl $TargetURL -Force
PowerShell, SharePoint Online'da Klasörler Arasında Dosya Kopyalamak için
Bir dosyayı bir klasörden başka bir klasöre kopyalamak için bir PowerShell örneği:
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$SourceURL = "/sites/marketing/Shared Documents/Active/SRS.docx"
$TargetURL = "/sites/marketing/Shared Documents/Categorized/SRS.docx"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Copy All Files and Folders from one folder to another
Copy-PnPFile -SourceUrl $SourceURL -TargetUrl $TargetURL -Force
Copy-PnPFile cmdlet'i, bir dosyayı farklı site koleksiyonlarındaki farklı kitaplıklar arasında aynı kitaplığa kopyalamak için kullanılabilir!
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/marketing"
$SourceURL= "Shared Documents/Discloser Asia.doc" #Site Relative path
$TargetURL = "/Sites/Sales/Shared Documents/Discloser Asia-v2.doc"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
#Copy File to another site collection
Copy-PnPFile -SourceUrl $SourceURL -TargetUrl $TargetURL -Force
Farklı site koleksiyonları arasında dosya kopyalamanız gerekiyorsa şunu kullanın: SharePoint Online: PowerShell kullanarak Site Koleksiyonları Arasında Dosya Kopyalama
PnP PowerShell kullanarak Belge Kitaplıkları Arasında Klasörleri Kopyalama
Tüm dosyaları ve alt klasörleri iki klasör arasında kopyalamak isterseniz ne olur?
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$SourceFolderURL = "/sites/marketing/Shared Documents/V1"
$TargetFolderURL = "/sites/marketing/Project Document/V1"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential) #-Interactive
#Copy All Files and Folders from one folder to another
Copy-PnPFile -SourceUrl $SourceFolderURL -TargetUrl $TargetFolderURL -Force
Ancak bu yöntem “RootFolder” nesnesi için çalışmaz! (Anlamı: Tüm dosya ve klasörleri belge kitaplıkları arasında kopyalamak için bu cmdlet'i çağıramazsınız).
PnP PowerShell, Tüm Dosyaları ve Klasörleri Meta Verilerle Belge Kitaplıkları Arasında Kopyalamak İçin
Tüm öğeleri kitaplıklar arasında kopyalarken meta verileri korumak mı istiyorsunuz? Sorun değil! Size, SharePoint Online'da dosyaları kopyalamak için kullanabileceğiniz basit bir PowerShell betiğini nasıl oluşturacağınızı göstereyim. Hem kaynak hem de hedef belge kitaplıklarının yerinde olduğunu varsayarsak, bu PowerShell betiği her şeyi meta verileriyle birlikte kaynaktan hedef kitaplığa kopyalar.
#Function to copy all Items from one library to another
Function Copy-AllDocuments($SourceLibraryName, $TargetLibraryName)
{
#Get Source and Target Libraries
$SourceLibrary = Get-PnPList -Identity $SourceLibraryName -Includes RootFolder
$TargetLibrary = Get-PnPList -Identity $TargetLibraryName -Includes RootFolder
$Web = Get-PnPWeb
#Calculate Site Relative URL of the Folder
If($Web.ServerRelativeURL -eq "/")
{
$FolderSiteRelativeUrl = $SourceLibrary.RootFolder.ServerRelativeUrl
}
Else
{
$FolderSiteRelativeUrl = $SourceLibrary.RootFolder.ServerRelativeUrl.Replace($Web.ServerRelativeURL,[string]::Empty)
}
#Get All Content from Source Library's Root Folder
$RootFolderItems = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeUrl | Where {($_.Name -ne "Forms") -and (-Not($_.Name.StartsWith("_")))}
#Copy Items to the Destination
$RootFolderItems | ForEach-Object {
$TargetURL = $TargetLibrary.RootFolder.ServerRelativeUrl
Copy-PnPFile -SourceUrl $_.ServerRelativeUrl -TargetUrl $TargetURL -Force -OverwriteIfAlreadyExists
Write-host "`tCopied '$($_.ServerRelativeUrl)'" -f Green
}
#Get All Items from Source Library
$SourceItems = Get-PnPListItem -List $SourceLibraryName -PageSize 500
$TargetItems = Get-PnPListItem -List $TargetLibraryName -PageSize 500
ForEach($SourceItem in $SourceItems)
{
#Get Metadata from Source Items
$Metadata = @{
'Title' = $SourceItem.FieldValues.Title
'Created'= $SourceItem.FieldValues.Created.DateTime
'Modified' = $SourceItem.FieldValues.Modified.DateTime
'Author' = $SourceItem.FieldValues.Author.Email
'Editor' = $SourceItem.FieldValues.Editor.Email
}
#Update Metadata in Target Items
ForEach($TargetItem in $TargetItems)
{
If($SourceItem.FieldValues.FileLeafRef -eq $TargetItem.FieldValues.FileLeafRef)
{
Set-PnPListItem -List $TargetLibrary -Identity $TargetItem.Id -Values $Metadata | Out-Null
}
}
}
}
#Connect to PnP Online
$SiteURL = "https://crescent.sharepoint.com/sites/Retail"
Connect-PnPOnline -Url $SiteURL -Interactive
#Call the function to copy all files between document libraries
Copy-AllDocuments -SourceLibraryName "Invoices" -TargetLibraryName "Invoices V2"
Bu komut dosyası, verilen belge kitaplıkları arasındaki tüm dosya ve klasörleri kopyalar. SharePoint Online'da bir belge kitaplığının tamamını başka bir siteye kopyalamak için şunu kullanın: SharePoint Online Belge kitaplığını başka bir siteye kopyalama PowerShell


