2015-02-11 87 views
1

Salutations-檢查Excel文檔到SharePoint programattically掛

我一直工作在PowerShell腳本,通過任務調度每天刷新Excel文檔的SQL數據的意圖。 Excel文檔託管在SharePoint上。我已經(經過很多試驗和錯誤)得到它的工作,直到簽入部分。

  • 基本上,Task Scheduler每天都會觸發PowerShell腳本。
  • 該腳本創建一個excel COM對象。
  • 它驗證它可以檢出文件,然後如果能夠檢出。
  • 然後執行刷新。
  • 最後,它試圖檢入文檔。在這一點上,它只是 手,沒有任何反應。我應該注意到,只有在通過任務調度程序運行 腳本時纔會發生這種情況,並且選擇了「是否已登錄用戶或未選擇 」。如果從PowerShell命令行運行或者 選項'用戶必須登錄'被選中,則所有事情都會執行 罰款。

夫婦重要筆記- 該帳戶是服務帳戶用戶,雖然我們在測試過程中授予它本地登錄。儘管如此,GOT在實踐中卻是無人看管的。 我按照這個頁面上的文件夾的說明- https://social.technet.microsoft.com/Forums/en-US/aede572b-4c1f-4729-bc9d-899fed5fad02/run-powershell-script-as-scheduled-task-that-uses-excel-com-object?forum=winserverpowershell 值得注意的是,我還必須對提到的文件夾的權限設置了幾個帖子,通過初始評論。我強烈懷疑我目前的問題是類似/相關的 - 但它不能是這些文件夾,因爲我在這裏擁有相當開放的權限。

我不得不刪除「增強的IE安全性」,因爲這是一個服務器盒,PowerShell最初無法「查看」SharePoint網站。

我檢查了事件日誌 - 辦公室日誌顯然是可操作的,但顯然在登入時沒有彈出窗口。

我已經設置並驗證了COM權限設置,雖然這可能是我錯過了一些東西。 Excel沒有在APP列表中列出,但是將用戶添加到呼叫權限讓我向前移動了任務。

我很確定這不會發生,如果我作爲開發管理員運行它。

CYA- 我知道MS不認可上述內容,但我也意識到人們可以使用它。 Powerpivot for SharePoint目前不是真正的選擇。 這就像我的第三個問題(我通常把我的頭靠在牆上,直到我得到它,但我在這裏只是'PowerShell腳本'有點血腥。請耐心等待,如果我超過/低於羅嗦了:)

截斷腳本如下─(刪除try/catch語句和調試消息。如果你想清潔全讓我知道,我很想救一個人的麻煩我了。)

$i = "http://supersecretintranetsite/excelwithsqldatacon.xlsx" 


# Creating the excel COM Object 
$Excel = New-Object -ComObject Excel.Application; 

Start-Sleep -s 5 
# Setting up Excel to run without UI and without alerts 
$Excel.DisplayAlerts = $false 
$Excel.ScreenUpdating = $false 
$Excel.Visible = $false 
$Excel.UserControl = $false 
$Excel.Interactive = $false 


If ($Excel.workbooks.CanCheckOut($i)) 
{ 

    # Opening the workbook, can be local path or SharePoint URL 
    $Workbook = $Excel.workbooks.Open($i);  

    # Perform the check out 
    $Workbook = $Excel.workbooks.CheckOut($i) 
    $Workbook = $Excel.workbooks.Open($i); 

    Start-Sleep -s 15 

    # Calling the refresh 
    $Workbook.RefreshAll(); 

    # Forces a hold until all Refreshing is done 
    $Excel.CalculateUntilAsyncQueriesDone() 

    # Saving and closing the workbook 
    # $Workbook.Save() #- this hangs too 
    Start-Sleep -s 15 
    # THIS HANGS 
    $Workbook.CheckInWithVersion(); 

    Start-Sleep -sec 5 

    #Release Workbook 
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook) 
} 

$ Excel.quit();

回答

0

原來是更多的文件夾權限。 我將該用戶的完全控制權限添加到\ windows * \ config \ systemprofile文件夾中的Appdata文件夾,並且它工作正常。 我分配了讀/寫,但我想這還不夠。