我一直在尝试实现一个PowerShell脚本,该脚本将访问Excel工作簿,检查它,刷新工作簿中的数据集,最后再次检入。
我将此与Windows任务计划程序中的任务相结合,每天从具有可访问SharePoint Online网站的用户帐户的服务器运行脚本。
我的问题是脚本无法运行。当我查看Windows事件日志时,我发现它收到403错误
该脚本取自此处的文档: Link to download document
该任务从任务的操作配置中的参数获取以下脚本和Excel工作簿的位置(详见上文)
try
{
# Creating the excel COM Object
$xl = New-Object -ComObject Excel.Application;
# Setting up Excel to run without UI and without alerts
$xl.DisplayAlerts = $false;
$xl.Visible = $false;
}
Catch
{
Write-EventLog -EventId "5001" -LogName "Application" -Message "Failed to start Excel" -Source "Application"
Exit
}
foreach ($i in $args)
{
write-host "handling $i"
try
{
# Allow update only if we can perform check out
If ($xl.workbooks.CanCheckOut($i))
{
# Opening the workbook, can be local path or SharePoint URL
$wb = $xl.workbooks.open($i);
# Perform the check out
$xl.workbooks.checkout($i)
# Calling the refresh
$wb.RefreshAll();
# Saving and closing the workbook
$wb.CheckInWithVersion();
# in case you are not using checkout/checkin perform a save and close
#$wb.Save();
#$wb.Close();
#Release Workbook
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb)
}
else
{
write-host "Check out failed for: $i"
Write-EventLog -EventId "5001" -LogName "Application" -Message "Workbook can't be checked out $i" -Source "Application"
}
}
catch
{
Write-EventLog -EventId "5001" -LogName "Application" -Message "Failed refreshing the workbook $i $_" -Source "Application"
}
}
#Quiting Excel
$xl.quit();
#Release Excel
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
我在这里错过了什么吗?
提前致谢,如果需要更多信息,请告诉我。
编辑:如果使用正确的参数从cmd手动运行,脚本将起作用。问题似乎是Task Scheduler无法访问PowerShell。
答案 0 :(得分:0)
所以我最终得到了这个。问题是,当选择了任务的常规设置中的“用户登录或未登录”选项时,它没有运行脚本。选择“用户登录”时工作正常。
以下是我必须采取的步骤才能使其正常运行。
首先需要从System32文件夹运行脚本(也在任务“开始时间”框中指定该目录。还要确保指向32位版本的PowerShell,因为Excel不能用于64位
第二,事实证明,Excel中存在一个错误,你必须在\ SysWOW64 \ config \ systemprofile \和\ System32 \ config \ systemprofile \目录中创建一个名为“Desktop”的文件夹(两个文件夹都需要创建如果运行Excel 64位)。
这是我最终使用的最后一个参数字符串:C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe -nologo -noprofile -noninteractive -executionpolicy bypass path \ to \ script'path \ to \ excelworkbook “