You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell查询强制触发错误方法及SharePoint空文件下载规避方案

我来帮你解决这两个PowerShell相关的问题:

1. 如何在PowerShell查询中强制触发错误?

要在PowerShell里强制触发错误,有几种常用的方式,你可以根据场景选择:

  • 手动抛出错误:用Throw关键字直接生成终止错误,会直接进入catch块,比如:
    Throw "这是一个我故意触发的测试错误"
    
  • 调用不存在的命令/函数:执行PowerShell不识别的命令,配合-ErrorAction Stop把警告转为终止错误,比如:
    Get-NonExistentCommand -ErrorAction Stop
    
  • 访问无效资源:请求不存在的URL或读取不存在的文件路径,加上-ErrorAction Stop确保触发终止错误:
    Invoke-WebRequest -Uri "https://invalid.example.com" -ErrorAction Stop
    Get-ChildItem -Path "C:\ThisFolderDoesNotExist" -ErrorAction Stop
    
  • 全局错误偏好设置:如果想让所有非终止错误都转为终止错误,可以先设置$ErrorActionPreference = 'Stop',之后任何命令出错都会触发catch块。
2. 避免下载不存在日期的空文件

你的核心问题是:当指定日期没有对应的Full-Report文件时,Graph API不会抛出错误,而是返回空的文件列表,导致后续下载操作生成空文件。我们需要先检查查询结果是否有匹配文件,再决定是否执行下载。

首先修正你原代码里的一个小问题:filter中的startswith(name,'Full-Report-$NameDate ')多了一个空格,你的文件名格式是Full-Report-2023-01-11-03.00.13AM.csv,去掉空格才能正确匹配。

下面是修改后的完整代码,关键逻辑都加了注释:

try{
    # 可修改AddDays参数调整查询日期(比如改为+5查询5天后的文件)
    $NameDate = (Get-Date).AddDays(0).ToString('yyyy-MM-dd')
    # 修正filter的空格问题,确保匹配正确的文件名前缀
    $apiUrl = "https://graph.microsoft.com/v1.0/sites/$siteId/drives/$driveId/items/root/children?`$orderby=name desc&`$filter=startswith(name,'Full-Report-$NameDate')&`$select=name,id&`$top=1"
    
    # 加上-ErrorAction Stop,确保API返回HTTP错误时能进入catch块
    $response = Invoke-WebRequest -Uri $apiUrl -Method GET -Headers $headers -ErrorAction Stop
    # 把响应转为JSON对象,方便解析文件列表
    $latestFiles = $response.Content | ConvertFrom-Json

    # 检查是否有匹配文件:value数组长度大于0则说明找到目标文件
    if ($latestFiles.value.Count -gt 0) {
        $targetFile = $latestFiles.value[0]
        Write-Host "找到目标文件:$($targetFile.name),开始下载..."
        
        # 这里添加下载逻辑,调用Graph API的文件内容接口完成下载
        $downloadUrl = "https://graph.microsoft.com/v1.0/sites/$siteId/drives/$driveId/items/$($targetFile.id)/content"
        Invoke-WebRequest -Uri $downloadUrl -Headers $headers -OutFile "C:\Your\Save\Path\$($targetFile.name)"
        Write-Host "文件下载完成!"
    } else {
        # 未找到文件时输出提示,跳过下载操作
        Write-Host "未找到日期为[$NameDate]的Full-Report文件,不执行下载。"
    }
}catch{
    $ErrorMessage = $_.Exception.Message
    Write-Host "ERROR TYPE: $ErrorMessage"
}

关键改进点:

  1. 修正了filter的匹配规则,确保能正确定位对应日期的文件
  2. 解析API响应为JSON对象,通过value数组的数量判断是否存在目标文件
  3. 仅当找到文件时才执行下载,避免生成空文件
  4. 给Invoke-WebRequest添加-ErrorAction Stop,确保API返回异常(如权限问题、站点不存在)时能进入catch块处理

内容的提问来源于stack exchange,提问作者aasenomad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:30:41