SharePoint Online: PowerShell kullanarak Alt Klasörler ve Dosyalar İçeren Bir Klasörü Geçirme
Gereksinim: PowerShell'i kullanarak bir klasörü alt klasörleri ve dosyalarıyla birlikte yerel diskten SharePoint Online'a taşıyın.
Bir Klasörü Alt Klasörleri ve Dosyalarıyla birlikte SharePoint Online'a kopyalamak için PowerShell:
Bir klasörü (ve tüm alt klasörlerini ve dosyalarını) yerel bilgisayarınızdan SharePoint Online'a geçirmek göz korkutucu bir görev olabilir. Neyse ki PowerShell bu sürecin hızlı ve kolay olmasına yardımcı olabilir. Bu makalede, alt klasörleri ve dosyaları olan bir klasörü PowerShell kullanarak SharePoint Online'a nasıl kopyalayacağınız gösterilecektir.
Belirli bir klasördeki tüm dosyaları ve alt klasörleri yerel bir sürücüden (veya ağ sürücüsünden) SharePoint Online'a kopyalamak için PnP PowerShell'i burada bulabilirsiniz:
#Function to Copy Multiple Files with Folder structure to SharePoint Online Document Library
Function Migrate-PnPFolderToSPO()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $SourceFolderPath,
[Parameter(Mandatory=$true)] [string] $LibraryName,
[Parameter(Mandatory=$true)] [string] $LogFile
)
Try {
Add-content $Logfile -value "`n---------------------- File Upload Script Started: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')-------------------"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get the Target Folder to Upload
$Web = Get-PnPWeb
$List = Get-PnPList $LibraryName -Includes RootFolder
$TargetFolder = $List.RootFolder
$TargetFolderSiteRelativeURL = $TargetFolder.ServerRelativeURL.Replace($Web.ServerRelativeUrl,[string]::Empty)
#Get All Items from the Source
$Source = Get-ChildItem -Path $SourceFolderPath -Recurse
$SourceItems = $Source | Select FullName, PSIsContainer, @{Label='TargetItemURL';Expression={$_.FullName.Replace($SourceFolderPath,$TargetFolderSiteRelativeURL).Replace("\","/")}}
Add-content $Logfile -value "Number of Items Found in the Source: $($SourceItems.Count)"
#Upload Source Items from Fileshare to Target SharePoint Online document library
$Counter = 1
$SourceItems | ForEach-Object {
#Calculate Target Folder URL
$TargetFolderURL = (Split-Path $_.TargetItemURL -Parent).Replace("\","/")
$ItemName = Split-Path $_.FullName -leaf
#Replace Invalid Characters
$ItemName = [RegEx]::Replace($ItemName, "[{0}]" -f ([RegEx]::Escape([String]'\*:<>?/\|')), '_')
#Display Progress bar
$Status = "uploading '" + $ItemName + "' to " + $TargetFolderURL +" ($($Counter) of $($SourceItems.Count))"
Write-Progress -Activity "Uploading ..." -Status $Status -PercentComplete (($Counter / $SourceItems.Count) * 100)
If($_.PSIsContainer)
{
#Ensure Folder
$Folder = Resolve-PnPFolder -SiteRelativePath ($TargetFolderURL+"/"+$ItemName)
Write-host "Ensured Folder '$($ItemName)' to Folder $TargetFolderURL"
Add-content $Logfile -value "Ensured Folder '$($ItemName)' to Folder $TargetFolderURL"
}
Else
{
#Upload File
If($TargetFolderURL.StartsWith("/")) {$TargetFolderURL = $TargetFolderURL.Remove(0,1) }
$File = Add-PnPFile -Path $_.FullName -Folder $TargetFolderURL
Write-host "Uploaded File '$($_.FullName)' to Folder $TargetFolderURL"
Add-content $Logfile -value "Uploaded File '$($_.FullName)' to Folder $TargetFolderURL"
}
$Counter++
}
}
Catch {
Write-host -f Red "Error:" $_.Exception.Message
Add-content $Logfile -value "Error:$($_.Exception.Message)"
}
Finally {
Add-content $Logfile -value "---------------------- File upload Script Completed: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')-----------------"
}
}
#Call the Function to Upload a Folder to SharePoint Online
Migrate-PnPFolderToSPO -SiteURL "https://crescent.sharepoint.com/sites/marketing" -SourceFolderPath "C:\Documents" -LibraryName "Migration" -LogFile "C:\Temp\Migration-LOG.log"
Bu komut dosyası, bir klasörün içeriğini SharePoint Online belge kitaplığına kopyalar. Hedef SharePoint Online kitaplığında mevcut herhangi bir dosyanın üzerine yazar ve hedef sitede yoksa bir klasör oluşturur. Bu betiği, dosyaları ve klasörleri bir ağ dosya paylaşımından SharePoint Online belge kitaplığına taşımak için de kullanabiliriz!
Özetle, alt klasörler ve dosyalar içeren yerel bir klasörü SharePoint Online'a geçirmek için PowerShell'i kullanmak, verileri yerel bir sistemden buluta aktarmak için güçlü ve etkili bir çözüm sağlar. Bu yöntem yalnızca klasörün yapısını ve içeriğini korumakla kalmaz, aynı zamanda geçiş sürecinin otomasyonuna da olanak tanıyarak kuruluşların verilerini buluta taşımasını hızlı ve kolay hale getirir.
