使用PowerShell 403错误刷新SharePoint Online中的Excel数据集

时间:2015-08-19 13:21:56

标签: excel powershell sharepoint refresh

我一直在尝试实现一个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。

1 个答案:

答案 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 “