Как скачать файл с несовместимым именем файла

Я ежедневно загружаю файл с сайта 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" 

Можете ли вы перечислить файлы в /root:/? Если это так, то вы просто сортируете их по дате и выбираете самую новую.

Santiago Squarzon 11.01.2023 02:15

@SantiagoSquarzon Привет, не могли бы вы показать мне, как это сделать?

aasenomad 11.01.2023 02:22
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
1
2
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Привет, спасибо за это, но когда я запускаю запрос, похоже, что он возвращает несколько элементов, а не только один, как упоминалось. пожалуйста посоветуй.

aasenomad 11.01.2023 14:55

@aasenomad Моя ошибка. Перед $select, $filter, $order и $top должен быть символ обратной кавычки, иначе powershell будет обрабатывать эти параметры как свойства. Я обновил ответ, указав правильный URI для Invoke-WebRequest.

user2250152 11.01.2023 15:25

Большое спасибо за это, но, случайно, можем ли мы отфильтровать, если он содержит сегодняшнюю дату в имени файла, чтобы он не загружался, если файл не обновлен. Я пытаюсь изменить startwith на нравится или содержит, но все равно не повезло.

aasenomad 11.01.2023 16:10

@aasenomad, использующий contains вместо startswith, тоже не работает для меня. Похоже, contains не поддерживается для этой конечной точки.

user2250152 12.01.2023 07:17

Другие вопросы по теме