使用Powershell上载到SharepointOnline子文件夹

使用Powershell上载到SharepointOnline子文件夹,powershell,sharepoint,sharepoint-online,Powershell,Sharepoint,Sharepoint Online,似乎我可以将文件上载到SPO的网站集URL,但无法上载到子文件夹。例如,我可以上载到“”,但不能上载到“”。以下是工作代码的相关位: $Username = "me@domain.com" $Password = "Password" $SiteCollectionUrl = "https://xyz.sharepoint.com/sites/Reporting" $securePassword = ConvertTo-SecureString $password -AsPlainText -F

似乎我可以将文件上载到SPO的网站集URL,但无法上载到子文件夹。例如,我可以上载到“”,但不能上载到“”。以下是工作代码的相关位:

$Username = "me@domain.com"
$Password = "Password"
$SiteCollectionUrl = "https://xyz.sharepoint.com/sites/Reporting"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$DocLibName = "Sales"

$Folder="C:\MySalesFolder"

    Function Get-SPOCredentials([string]$UserName,[string]$Password)
    {
       $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
       return New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword)
    }
     $Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteCollectionUrl)
     $Context.Credentials = Get-SPOCredentials -UserName $UserName -Password $Password

    #Retrieve list
    $List = $Context.Web.Lists.GetByTitle($DocLibName)
    $Context.Load($List)
    $Context.ExecuteQuery()

    #Upload file
    Foreach ($File in (dir $Folder -File))
    {
    $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 = $List.RootFolder.Files.Add($FileCreationInfo)
    $Context.Load($Upload)
    $Context.ExecuteQuery() 
我试图硬编码“/Sales”子文件夹,但没有成功。任何人都可以为我指出正确的方向?

根据需要,您需要修改文件CreationUrl:

$FileCreationInfo.URL = $List.RootFolder.ServerRelativeUrl + "/" + $FolderName + "/" + $File.Name
我相信您只需要在$File.Name前面加上根目录的文件夹路径

Web.GetFolderByServerRelativeUrl方法:

除了尝试通过List.RootFolder…上载外,还可以使用“GetFolderByServerRelativeUrl”方法获取目标文件夹

$List = $Context.Web.Lists.GetByTitle($DocLibName)
$Context.Load($List.RootFolder) 
$Context.ExecuteQuery()
$FolderName = "Sales"

$TargetFolder = $Context.Web.GetFolderByServerRelativeUrl($List.RootFolder.ServerRelativeUrl + "/" + $FolderName);
那么对于上传,您将使用

$FileCreationInfo.URL = $File.Name
$UploadFile = $TargetFolder.Files.Add($FileCreationInfo)
$Context.Load($UploadFile)
$Context.ExecuteQuery()

我试图设置$FolderName=“Sales”,但调用带有“0”参数的“ExecuteQuery”会引发一个错误异常:“值不在预期范围内”。按照上述方式设置$FileCreationInfo.URL后,您从$FileCreationInfo.URL获得了什么输出?URL:“/Reporting/Sales/Foo.txt”。我猜它缺少sharepoint.com前面的URL?Foo.txt是我的测试文件。它似乎缺少基本URL路径,但我不确定这是否是一个问题,因为上下文无论如何都应该包含该信息。我添加了另一种检索目标文件夹的方法。从那里,您应该可以从$TargetFolder对象获得一些反馈,了解它是否能够成功解析目标文件夹。对不起,是指“/Sales/Foo.txt”。我在那里做了测试报告。