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

Refresh Excel dataset in SharePoint Online with PowerShell 403 error

我一直在尝试实现一个 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 手动执行,则脚本有效。问题似乎是任务计划程序无法访问 PowerShell。

所以我终于成功了。 Issue was that it wasn't 运行ning the script when the option 'User logged on or not' in the general settings of the task was selected.选择 'User logged on' 时工作正常。

以下是我必须采取的步骤才能正确地 运行。

首先,脚本需要从 System32 文件夹 运行(也在任务 "Start In" 框中指定该目录。还要确保您指向的是 32 位版本的 PowerShell,因为Excel 不适用于 64 位

其次,Excel 存在一个错误,您必须在 \SysWOW64\config\systemprofile\ 和 \System32\config\systemprofile\ 目录(两个文件夹如果 运行ning Excel 64 位,则需要创建)。

这是我最终使用的最后一个参数字符串:C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe -nologo –noprofile -noninteractive -executionpolicy bypass path\to\script 'path\to\excelworkbook'