如何下载文件名不一致的文件



我每天从SharePoint站点下载一个文件,下面的代码工作正常。我唯一需要弄清楚的是,如果文件名不一致,如何传递filename参数。

例如。这个文件是由这样的人每天上传的

Full-Report-2023-01-10-03.00.13AM.csv
Full-Report-2023-01-09-02.00.43AM.csv
Full-Report-2023-01-08-20.30.53AM.csv

我应该每天下载那个文件,但如果文件名中包含了时间,我就不知道该怎么做了。

任何帮助或建议都将非常感谢。


function DownloadFile($token, $siteId, $driveId, $filePath, $fileName)
{
$headers=@{}
$headers.Add("Content-Type", "text/plain")
$headers.Add("Authorization", "Bearer $token")
$response = Invoke-WebRequest -Uri "https://graph.microsoft.com/v1.0/sites/$siteId/drives/$driveId/items/root:/$($filename):/content" -Method GET -OutFile $filePath -Headers $headers
}
# Need to fix here
DownloadFile -token $token -siteId $siteId -driveId $driveId -filePath "E:Log-FilesLatest-Report.csv" -fileName "Full-Report-2023-01-08-20.30.53AM.csv" 

me/drive/root/children端点不支持按createdDateTime属性排序,所以需要按name降序排序文件,使用$filter只返回以Full-Report-开头的文件,以减少要返回的文件数量。可以使用$select只返回idname属性。你只能返回一个项目(通过使用$top)),它应该是最新的文件。

$latestFiles = Invoke-WebRequest -Uri "https://graph.microsoft.com/v1.0/sites/$siteId/drives/$driveId/items/root/children?`$orderby=name desc&`$filter=startswith(name,'Full-Report-')&`$select=name,id&`$top=1" -Method GET -Headers $headers

那么,如果你有以下文件

Full-Report-2023-01-10-03.00.13AM.csv
Full-Report-2023-01-09-02.00.43AM.csv
Full-Report-2023-01-08-20.30.53AM.csv

上面的查询应该只返回Full-Report-2023-01-10-03.00.13AM.csv

解析响应json$latestFiles以获得第一项的name属性。

现在您可以调用DownloadFile,并使用name从上面的响应-fileName

# parse the response json to get name property of the first item
$firstItem = $latestFiles[0] #parse response by yourself
DownloadFile -token $token -siteId $siteId -driveId $driveId -filePath "E:Log-FilesLatest-Report.csv" -fileName $firstItem.Name

相关内容

  • 没有找到相关文章

最新更新