Загрузка нескольких файлов из нескольких папок в SharePoint онлайн с помощью Powershell - PullRequest
0 голосов
/ 06 января 2019

Совершенно новый для SharePoint онлайн и Powershell и думал, что это будет довольно простой задачей, но я обращаюсь за помощью.

У меня есть клиент, у которого есть фотографии, которые хранятся в нескольких папках в общей папке, и они хотят перенести это в SharePoint. Они хотят использовать имя папки, из которой файл выходит в качестве метаданных, чтобы упростить поиск.

Это сценарий, который я использую, и мне не повезло.

$connection = Connect-PnPOnline https://somecompany.sharepoint.com -Credentials $me -ReturnConnection 

$files = Get-ChildItem "F:\some data" -Recurse

foreach ($file in $files)
  {Add-PnPFile -Path $file.FullName -Folder Photos -Values @{"Title" = $file.Name;} -Connection $connection}

Проблема, с которой я сталкиваюсь, заключается в том, что это не возвращает папки и возвращает сообщение «Локальный файл не найден»

Если я смогу заставить это работать, я могу перейти к получению текущего имени папки в качестве переменной в метаданных.

Я почти уверен, что это будет простая задача для экспертов, но, увы, нет. Любая помощь будет принята с благодарностью.

Спасибо Jassen

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы можете попробовать скрипт ниже, вам нужно установить pnp powershell .

function UploadDocuments(){
Param(
        [ValidateScript({If(Test-Path $_){$true}else{Throw "Invalid path given: $_"}})] 
        $LocalFolderLocation,
        [String] 
        $siteUrl,
        [String]
        $documentLibraryName
)
Process{
        $path = $LocalFolderLocation.TrimEnd('\')

        Write-Host "Provided Site :"$siteUrl -ForegroundColor Green
        Write-Host "Provided Path :"$path -ForegroundColor Green
        Write-Host "Provided Document Library name :"$documentLibraryName -ForegroundColor Green

          try{
                $credentials = Get-Credential

                Connect-PnPOnline -Url $siteUrl -CreateDrive -Credentials $credentials

                $file = Get-ChildItem -Path $LocalFolderLocation -Recurse
                $i = 0;
                Write-Host "Uploading documents to Site.." -ForegroundColor Cyan
                (dir $path -Recurse) | %{
                    try{
                        $i++
                        if($_.GetType().Name -eq "FileInfo"){
                          $SPFolderName =  $documentLibraryName + $_.DirectoryName.Substring($path.Length);
                          $status = "Uploading Files :'" + $_.Name + "' to Location :" + $SPFolderName
                          Write-Progress -activity "Uploading Documents.." -status $status -PercentComplete (($i / $file.length)  * 100)
                          $te = Add-PnPFile -Path $_.FullName -Folder $SPFolderName
                         }          
                        }
                    catch{
                    }
                 }
            }
            catch{
             Write-Host $_.Exception.Message -ForegroundColor Red
            }

  }
}


UploadDocuments -LocalFolderLocation C:\Lee\Share -siteUrl https://tenant.sharepoint.com/sites/Developer -documentLibraryName MyDOc4
0 голосов
/ 07 января 2019

Это, кажется, работает для меня, так что отвечу на это. Рад за комментарии, если есть более простой способ или чище, а также если кто-то знает, как пройти еще 1 слой глубже.

$connection = Connect-PnPOnline https://somecompany.sharepoint.com -Credentials $me -ReturnConnection
$LocalFolders = get-childitem -path "c:\test" | where-object {$_.Psiscontainer} | select-object FullName

foreach ($folder in $localfolders) {

$files = get-childitem -Path $folder.FullName -Recurse 

foreach ($file in $files) {

$value1 = $file.Directory.Name

Add-PnPFile -Path $file.FullName -Folder Photos -Values @{"Title" = $file.Name;"SubCat" = $value1;} -Connection $connection 
        }
}
...