检查到SharePoint的Excel文档编程挂起

Salutations-

我一直在研究PowerShell脚本,目的是通过任务调度器每天刷新Excel文档的SQL数据。 Excel文档托pipe在SharePoint上。 我已经(经过了很多的试验和错误)得到它的工作,直到签入部分。

  • 基本上,Task Scheduler每天都会触发PowerShell脚本。
  • 该脚本创build一个excel COM对象。
  • 它validation它可以检出文件,然后如果能够的话。
  • 然后它执行刷新。
  • 最后,它试图检入文件。 在这一点上,它只是手中没有任何反应。 我应该注意到,只有在通过任务计划程序运行脚本时才会发生,并select“是否用户已login”。 如果从PowerShell命令行运行,或select“用户必须login”选项,则一切正常。

夫妇重要笔记 – 帐户是一个服务帐户用户,虽然我们在testing过程中授予它本地login。 但是GOT在实践中是无人看pipe的。 我按照此页面上的文件夹说明 – 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网站。

我已经检查了事件日志 – 办公日志显然是可操作的,但显然在登入时没有popup窗口。

我已经设置并validation了COM权限设置,虽然这可能是我错过了一些东西。 Excel没有在APP列表中列出,但是将用户添加到呼叫权限使我在任务上向前移动。

我很确定这不会发生,如果我作为开发pipe理员运行它。

CYA-我知道MS并不赞同上述内容,但是我也意识到人们能够正常工作。 Powerpivot for SharePoint目前不是一个真正的select。 这就像我的第三个问题(我通常把我的头靠在墙上,直到我得到它,但我在这里只是一个PowerShell脚本有点血腥。请忍受我,如果我在/罗嗦:)

下面的截断脚本 – (删除try / catch和debugging信息,如果你想清理完整的信息让我知道,我很乐意救一个人的麻烦)

$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();

原来是更多的文件夹权限。 我将该用户的完全控制权限添加到\ windows * \ config \ systemprofile文件夹中的Appdata文件夹,并且工作正常。 我分配了读/写,但我想这还不够。