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" }
关键改进点:
- 修正了
filter的匹配规则,确保能正确定位对应日期的文件 - 解析API响应为JSON对象,通过
value数组的数量判断是否存在目标文件 - 仅当找到文件时才执行下载,避免生成空文件
- 给
Invoke-WebRequest添加-ErrorAction Stop,确保API返回异常(如权限问题、站点不存在)时能进入catch块处理
内容的提问来源于stack exchange,提问作者aasenomad
相关产品推荐
相关产品推荐

