2017-01-11 2 views
0

Мой клиент генерирует отчеты (excel-файлы) ежемесячно, и они загружают файлы в библиотеке документов SharePoint. Снова некоторые сообщения поступают через почту (прогноз).Как импортировать файлы с сайта команды SharePoint на локальные компьютеры?

Требование: мы должны скопировать отчеты Excel (которые находятся в библиотеке документов и файлы, поступающие через почту) в зону посадки (FTP-сервер), и нам необходимо автоматизировать этот процесс каждый месяц.

Каков наилучший способ достичь этого? Пожалуйста, помогите мне на this.Thank вас ..

+0

Вы можете использовать службу webclient с powershell для загрузки документов из библиотеки документов Sharepoint. http://www.karthikscorner.com/sharepoint/sharepoint-webdav-webclient-service/ – Vaibhav

+0

Спасибо, но возможно ли это с помощью powershell commaands ??? – jijo

+0

Да, это так. Поделитесь кодом через некоторое время – Vaibhav

ответ

0
$uri = "https://intranet.company.com/departments/SampleSite/_api/web/getfilebyserverrelativeurl('/departments/SampleSite/Shared Documents/test.docx')/`$Value" 
$FileBinary = $(Invoke-WebRequest -Uri $uri -Credential $cred -ContentType 'application/json;odata=verbose').Content 
[System.IO.File]::WriteAllBytes('C:\tempfolder\test.docx',$FileBinary) 

С помощью этого примера вы можете загрузить файл и сохранить его (он использует SP REST API). В этом простом примере используются учетные данные текущего пользователя.

Редактировать: по запросу Я добавил образец для SharePoint Online (для этого вам нужен SD SDK из-за потока входа). Код не оптимизирован, хотя это был один из моих первых образцов. Проблема в том, что вы должны иметь «жесткие» учетные данные. Мое решение для этого в моей компании шифрует учетные данные с помощью сертификата: я шифрую учетные данные в файле, используя открытый ключ учетной записи службы, на которой запущен скрипт; учетная запись службы использует закрытый ключ для ее расшифровки. Не идеальный, но достаточно безопасный для нас.

$cred = Get-Credential # Get credentials 

## Load the Assemblies 
add-type -AssemblyName system.net.http 
Add-type -Path "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SharePoint.Client.Runtime\v4.0_16.0.0.0__71e9bce111e9429c\Microsoft.SharePoint.Client.Runtime.dll" 

# Put credentials in SPO credential object 
$SPCred = [Microsoft.SharePoint.Client.SharePointOnlineCredentials]::new($cred.UserName,$cred.Password) 
# Set the uri's 
$uri = [uri]::new('https://YourTentant.sharepoint.com') 
$fullUri = "https://YourTentant.sharepoint.com/sites/ApiTest/_api/web/getfilebyserverrelativeurl('/sites/ApiTest/Shared Documents/Document.docx')/`$Value" 
# Create HTTPClientHandler object and set the properties 
$handler = [System.Net.Http.HttpClientHandler]::new() 
$handler.Credentials = $SPCred 
$handler.CookieContainer.SetCookies($uri,$SPCred.GetAuthenticationCookie($uri)) 

# Create the client and set the options 
$Client = [System.Net.Http.HttpClient]::new($handler) 
$Client.DefaultRequestHeaders.Accept.Clear() 
$Client.DefaultRequestHeaders.Accept.Add([System.Net.Http.Headers.MediaTypeWithQualityHeaderValue]::new('application/json')) 
# Call the URL (async) and get the response 
$Response = $Client.GetAsync($fullUri) 
$data = $Response.Result 

## now download the data as string (in the final version I'm going to call the ReadAsStream() method instead to get the binary file) 
$a = $data.Content.ReadAsStringAsync() 
$a.Result 
+0

Спасибо большое! – jijo

+0

работает ли код o365? – jijo

+0

Это не работает в O365 (мне пришлось написать для него новый скрипт, так как я не могу использовать делегированные учетные данные для этого, мне пришлось использовать SDK SharePoint, чтобы заставить поток входа работать). Я обновлю ответ, чтобы включить рабочий образец для SPO) – bluuf

Смежные вопросы