2017-01-11 55 views
0

我的客戶端每月生成報告(excel文件),並且他們上傳SharePoint文檔庫中的文件。有一些報道再次通過郵件(展望)。如何將文件從SharePoint團隊網站導入本地計算機?

需求是我們需要將excel報告(在文檔庫和通過郵件發送的文件中)複製到着陸區(FTP Server),我們需要每月自動執行此過程。

這是實現此目標的最佳方法嗎?請幫我this.Thank你..

+0

您可以使用webclient服務與powershell從Sharepoint文檔庫下載文檔。 http://www.karthikscorner.com/sharepoint/sharepoint-webdav-webclient-service/ – Vaibhav

+0

謝謝,但它可能通過PowerShell的逗號? – 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添加了一個示例(因爲登錄流程需要SP 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中不起作用(我必須爲此編寫一個新腳本,因爲我無法使用委託憑證,因此我必須使用SharePoint SDK才能使登錄流程正常工作)。我會更新答案以包含SPO的工作示例) – bluuf

相關問題