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

oaxa6hgo  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(177)

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

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-Files\Latest-Report.csv" -fileName "Full-Report-2023-01-08-20.30.53AM.csv"
mwkjh3gx

mwkjh3gx1#

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-Files\Latest-Report.csv" -fileName $firstItem.Name

相关问题