我一直在研究PowerShell脚本,目的是通过任务调度程序每天刷新excel文档的SQL数据。 excel文档托管在SharePoint上。我(经过多次试验和错误)让它一直工作到签到部分。
结合重要的笔记 - 该帐户是服务帐户用户,但我们在测试期间授予了本地登录。但是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 :(得分:0)
原来是更多的文件夹权限。 我将该用户的完全控制权限添加到\ windows * \ config \ systemprofile文件夹中的Appdata文件夹,并且它有效。 我已经分配了读/写但我认为这还不够。