Как я могу обновить.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. Надеюсь, что вы попадете на правильный путь.

https://blogs.technet.microsoft.com/fromthefield/2014/02/19/office-365-powershell-script-to-upload-files-to-a-document-library-using-csom/

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

SPOUploadFile.ps1

Другие вопросы по тегам