我在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-PnPFile
cmdlet 会发生以下异常:
参数必须是单个文件名,并且不能包含路径 字符。
似乎这里已经报告了类似的问题
进一步分析Add-PnPFile
cmdlet 的源代码
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"