Действительно, если имя файла содержит специальные символы (например, #
), для Add-PnPFile
cmdlet возникает следующее исключение:
Аргумент должен содержать одно имя файла и не может содержать путьсимволов.
И, похоже, о подобной проблеме уже сообщалось здесь
Дальнейший анализ исходного кода для Add-PnPFile
командлет
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 для бизнеса была введена , не уверен, почему #
по-прежнему не разрешен.Итак, я бы посчитал это ошибкой и рекомендую сообщить о проблеме в GitHub.
Между тем вы могли бы рассмотреть следующие решения:
Опция 1
Используйте следующую функцию для загрузки файла, имитирующего в некоторой степени Add-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
Заменить все не поддерживаемые специальные символы с использованием -NewFileName
параметр командлета Add-PnPFile, например:
Add-PnPFile -Path "./Guide #123.docx" -Folder "Shared Documents" -NewFileName "Guide 123.docx"