Загрузить файл с Google Диска с помощью PowerShell

Сейчас при попытке загрузить файл с PowerShell у меня есть следующее

$client = new-object System.Net.WebClient
$client.DownloadFile($AGRIDATAMISCURL,$TESTAGRIDATAMISCZIP)

Где $AGRIDATAMISCURL - это URL-адрес, который выглядит как " https://drive.google.com/file/d/<...>", а $TESTAGRIDATAMISCZIP выглядит как "C:\test\A.zip"

Этот скрипт не возвращает ошибку, но загружаемый файл представляет собой HTML-файл с приглашением войти в Google. Есть ли другой способ загрузить файл, которым "делятся со мной"?

Спасибо.

Kevin

3 ответа

Сначала поделитесь файлом

Перед загрузкой файлы на Google Диске должны быть доступны для совместного использования. При запуске из PowerShell отсутствует контекст безопасности, поэтому загрузка файла не выполняется. (Чтобы проверить это, переименуйте файл с.html расширение и просмотреть в текстовом редакторе).

Примечание: в следующем решении предполагается, что ссылки относятся к файлам, не критичным для безопасности, или что ссылки будут предоставлены только тем, кому можно доверять доступ (ссылки https, поэтому они зашифрованы при передаче). Альтернативой является программная аутентификация с помощью Google - в этом ответе не рассматривается.

Чтобы поделиться файлом на Google Диске:

  1. Щелкните файл правой кнопкой мыши и выберите Получить ссылку для общего доступа.


  2. Включите доступ по ссылке


  1. Нажмите Настройки доступа.


  1. Убедитесь, что любой, у кого есть ссылка, может просматривать (обратите внимание, что в корпоративных средах ссылка должна быть предоставлена ​​лицам за пределами организации, чтобы избежать необходимости входа в систему)


Затем загрузите программно

  1. Затем можно использовать код для загрузки файла как такового:

# Download the file
$zipFile = "https://drive.google.com/uc?export=download&id=1cwwPzYjIzzzzzzzzzzzzzzzzzzzzzzzz"
Invoke-WebRequest -Uri $zipFile -OutFile "$($env:TEMP)\myFile.doc"

  • Заменить 1cwwPzYjIzzzzzzzzzzzzzzzzzzzzzzzz с помощью идентификационного кода из настройки общей ссылки на шаге 2 выше.

Параметр подтверждения теперь необходим для загрузки файла без подтверждения. Я использую следующий подход с WebClient:

      $WebClient = New-Object System.Net.WebClient
$Url = "https://drive.google.com/uc?export=download&id=YOUR_ID_HERE&confirm=t"
$WebClient.DownloadFile($Url, "C:\Download\file_name.zip")

Здесь, чтобы добавить ответ @CJBS. Следующее решение работает ТОЛЬКО ДЛЯ ФАЙЛОВ :

Обратите внимание, что в 2023 году формат общих ссылок на диск Google изменился после ответа CJBS. Они больше не содержат явного идентификатора, а представляют собой строку цифр и букв после символа, которая, скорее всего, представляет идентификатор общего файла.

Возьмем, к примеру, эту ссылку:

      https://drive.google.com/file/d/1SE04CUOPdUKGcloOYDpifOlamy70mcpx/view?usp=sharing

Я взял ссылку в ответе @CJBS:

"https://drive.google.com/uc?export=download&id=<INSERT_STRING_AFTER_/d/>

и сразу послеid=Я добавил1SE04CUOPdUKGcloOYDpifOlamy70mcpxэто между/d/и/viewв моей ссылке для общего доступа и моей ссылке на скачивание Powershell стало следующее:

      https://drive.google.com/uc?export=download&id=1SE04CUOPdUKGcloOYDpifOlamy70mcpx

Моя команда Powershell с включенной ссылкой для скачивания выглядит следующим образом:

      Invoke-WebRequest -Uri "https://drive.google.com/uc?export=download&id=1SE04CUOPdUKGcloOYDpifOlamy70mcpx" -OutFile ./Dex.mp3
Другие вопросы по тегам