使用Powershell上载到SharepointOnline子文件夹
似乎我可以将文件上载到SPO的网站集URL,但无法上载到子文件夹。例如,我可以上载到“”,但不能上载到“”。以下是工作代码的相关位:使用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
$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”。我在那里做了测试报告。