Как я могу обновить.jpg на SharePoint
У меня есть старый скрипт, который обновляет картинки один раз в день на нашей SharePoint. Сценарий перед обновлением до SharePoint 365 сделал фотографию с веб-камеры, сохранил фотографию локально, а затем загрузил фотографию в SharePoint. Работает нормально.
Но поскольку мы обновляем до SharePoint 365, последний шаг больше не работает.
Это старый код для загрузки его в SharePoint.
# Upload to Sharepoint
[System.Management.Automation.PSCredential] $SharepointCredentials = New-Object System.Management.Automation.PSCredential ($SharepointUser, ($SharepointPassword | ConvertTo-SecureString -AsPlainText -Force) )
Invoke-WebRequest -Uri $SharepointUrl -Method Put -InFile "$Path\webcam.jpg" -ContentType 'image/jpg' -Credential $SharepointCredentials -UseBasicParsing | Out-Null
Я думаю, что проблема на Invoke-WebRequest
и это Put
больше не работает. Знаете ли вы, если есть новый метод для изменения или обновления файла?
2 ответа
В этой статье объясняется, как загружать файлы в библиотеку Office 365 SharePoint с помощью CSOM через powershell. Надеюсь, что вы попадете на правильный путь.
Credentials
параметр в Invoke-WebRequest
Командлет не поддерживает проверку подлинности на основе утверждений SharePoint Online, он поддерживает только схемы проверки подлинности, такие как базовая проверка, дайджест, проверка подлинности NTLM и Kerberos.
Выполнение аутентифицированного запроса в SharePoint Online с использованием учетных данных пользователя SharePointOnlineCredentials
класс может быть использован, как показано ниже:
function Connect-SPO ([string] $Username, [string]$Password, [string]$Url) {
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
$Context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $(ConvertTo-SecureString -AsPlainText $Password -Force))
$Context.ExecuteQuery()
$AuthenticationCookie = $Context.Credentials.GetAuthenticationCookie($Url, $true)
$WebSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$WebSession.Credentials = $Context.Credentials
$WebSession.Cookies.SetCookies($Url, $AuthenticationCookie)
$FormsDigest = $Context.GetFormDigestDirect()
$WebSession.Headers['X-RequestDigest'] = $FormsDigest.DigestValue
$Context.Dispose()
return $WebSession
}
Тогда ваш скрипт для загрузки файла можно изменить так:
#Connect
$Session = Connect-SPO -Username $Username -Password $Password -Url $WebUrl
# Upload file
$targetFileUrl = "$WebUrl/documents/$($FileInfo.Name)" #set target file url
Invoke-WebRequest -Uri $targetFileUrl -Method Put -WebSession $Session -InFile $filePath