将文件从本地路径批量上传到 SharePoint Online 是否允许与号和磅?



我在Win 10上使用PowerShell PnP v3将文件和文件夹批量上传到SPO。我正在使用此页面中的脚本:在此处输入链接描述,效果很好。但是,它将跳过包含与号 (&( 或井号 (#( 的文件和文件夹。如何更新此代码以允许这些字符? 我是Powershell新手,因此非常感谢任何帮助。

$cred=Get-Credential  
$makeUrl ="https://sharepoint.com/" 
$sourcePath = "C:foldername"; 
$topSPOFolder = "onetwo"; 
# connect to spo online 
Connect-PnPOnline -Url $makeUrl -Credentials $cred
$fileNames = Get-ChildItem -Path $sourcePath -Recurse ;
foreach($aFileName in $fileNames) 
{ 
if($aFileName.GetType().Name -ne "DirectoryInfo")  
{ 
$filepath= [System.IO.Path]::GetDirectoryName($aFileName.FullName)+"" 
$Urlpath= ($filepath.Replace($sourcePath, '')); 
$foldername=$Urlpath.Replace("/",""); 
$fn=$topSPOFolder+""+$foldername; 
Add-PnPFile -Path $aFileName.FullName -Folder $fn; 
$fn=$null 
} 
}

实际上,如果文件名包含特殊符号(如#(,则Add-PnPFilecmdlet 会发生以下异常:

参数必须是单个文件名,并且不能包含路径 字符。

似乎这里已经报告了类似的问题

进一步分析Add-PnPFilecmdlet 的源代码

if (fileName.ContainsInvalidFileFolderChars())
throw new ArgumentException(CoreResources.FileFolderExtensions_UploadFile_The_argument_must_be_a_single_file_name_and_cannot_contain_path_characters_, nameof(fileName));

确认(至少在3.2.1810.0版本中(:

  • 不允许#
  • 允许&

但鉴于SharePoint Online和OneDrive for Business中引入了对#和%的支持,不确定为什么仍然不允许#。因此,我认为这是一个错误,并建议在GitHub中报告问题。

同时,您可以考虑以下解决方案:

选项 1

利用以下函数上传在某种程度上模仿 cmdletAdd-PnPFile的文件:

Function UploadAFile() 
{
Param(
[Parameter(Mandatory=$True)]
[string]$PathName,
[Parameter(Mandatory=$True)]
[String]$FolderName,
[Parameter(Mandatory=$False)]
[String]$FileName
)
$ctx = Get-PnPContext
if([string]::IsNullOrEmpty($FileName)){
$FileName = [System.IO.Path]::GetFileName($PathName)
}
$folder = [Microsoft.SharePoint.Client.FileFolderExtensions]::EnsureFolder($ctx.Web,$ctx.Web.RootFolder, $FolderName)
$fileUrl = [OfficeDevPnP.Core.Utilities.UrlUtility]::Combine($folder.ServerRelativeUrl, $FileName)
$fci= New-Object Microsoft.SharePoint.Client.FileCreationInformation
$fci.Overwrite = $true
$fci.Content = [System.IO.File]::ReadAllBytes($PathName)
$fci.Url = $FileName
$uploadFile = $folder.Files.Add($fci)
$ctx.ExecuteQuery()
return $uploadFile
}

UploadAFile  -PathName "./Guide #123.docx" -FolderName "Shared Documents" 

选项 2

使用 Add-PnPFile cmdlet 的参数替换所有不支持-NewFileName特殊符号,例如:

Add-PnPFile -Path "./Guide #123.docx" -Folder "Shared Documents" -NewFileName "Guide 123.docx"

相关内容

最新更新