Я пытался загрузить файлы и папки в SharePoint Online с помощью PowerShell. Я почти закончил, но что-то не так с кодом в рекурсивном методе. Он загружает файлы в папку ниже предполагаемой. Например, если бы у меня была структура папок, и в каждой папке было 3 файла:
Папка1\Папка2\Папка3
Файлы в Folder2 и Folder3 будут загружены в папку 3.
Я знаю, что папки загружаются первыми, поэтому путь $UploadSubFolder
обновляется до нижней папки, но я не знаю, как это исправить! Не могли бы вы написать немного кода, чтобы файлы загружались первыми?
Может ли кто-нибудь помочь мне с этой проблемой? Спасибо!
Function ImportFiles()
{
ForEach($File in Get-ChildItem $CurrentFolder)
{
If($File.PSIsContainer -eq $false)
{
#Upload File to Folder in Sharepoint
$FileStream = New-Object IO.FileStream($File.FullName,[System.IO.FileMode]::Open)
$FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.ContentStream = $FileStream
$FileCreationInfo.URL = $File
$Upload = $UploadSubFolder.Files.Add($FileCreationInfo)
$Context.Load($Upload)
$Context.ExecuteQuery()
}
ElseIf($File.PSIsContainer -eq $True)
{
#Upload SubFolder
$CurrentFolder = $CurrentFolder + "\" + $File.Name
$NewFolder1 = Split-Path $File -leaf
$UploadSubFolder = $UploadSubFolder.Folders.Add($NewFolder1)
$Context.Load($UploadSubFolder)
$Context.ExecuteQuery()
ImportFiles
}
Else
{
Write-Host "Upload Complete"
}
}
}
#Get name of Root folder
$NewFolder = Split-Path $Folder -Leaf
#upload Root folder to sharepoint
$UploadFolder = $List.RootFolder.Folders.Add($NewFolder)
$Context.Load($UploadFolder)
$Context.ExecuteQuery()
ForEach($File in (dir $Folder))
{
if($File.PSIsContainer -eq $false)
{
#Upload File to Folder in Sharepoint
$FileStream = New-Object IO.FileStream($File.FullName,[System.IO.FileMode]::Open)
$FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.ContentStream = $FileStream
$FileCreationInfo.URL = $File
$Upload = $UploadFolder.Files.Add($FileCreationInfo)
$Context.Load($Upload)
$Context.ExecuteQuery()
}
else
{
$CurrentFolder = $Folder + "\" + $File.Name
#upload folder
$NewFolder = Split-Path $File -leaf
$UploadSubFolder = $UploadFolder.Folders.Add($NewFolder)
$Context.Load($UploadSubFolder)
$Context.ExecuteQuery()
ImportFiles
}
}