我每天从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
只返回id
和name
属性。你只能返回一个项目(通过使用$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