使用Powershell将多个文件从多个文件夹上载到SharePoint Online

时间:2019-01-06 05:51:49

标签: powershell sharepoint-online

对于SharePoint Online和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}

我遇到的问题是,这不会递归文件夹,并返回“找不到本地文件”

如果我可以使用它,我可以继续将当前文件夹名称作为变量添加到元数据中。

我很确定这对专家来说将是一个简单的任务,但是可惜我不是。任何帮助将不胜感激。

谢谢 贾森

2 个答案:

答案 0 :(得分:0)

这似乎对我有用,所以请回答。如果有更简便的方法或更清洁的方法,并且有人知道如何更深入一点,那么我们很乐意发表评论。

$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 
        }
}

答案 1 :(得分:0)

您可以尝试使用以下脚本,需要安装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