Запуск сценария powershell с gsutil cp в GCP показывает ход загрузки в нескольких строках

#powershell #gsutil

#powershell #gsutil

Вопрос:

У меня есть простой сценарий powershell, который запускается из планировщика задач в моей системе Win’2008R2, который в основном просто выполняет следующую команду:

gsutil -o GSUtil:parallel_composite_upload_component_size=0 cp -L C:logslog1.txt C:archive *.zip gs://temp

Я использую Start-Transcript для записи выходных данных в результаты.файл журнала. Проблема в том, что при загрузке zip-файлов в gcp он продолжает записывать прогресс в нескольких строках после каждых 64 КБ во время загрузки:

 Resuming upload for file://E:dbdb1.zip
Uploading   gs://temp/db1.zip:             0 B/1.20 GiB
Uploading   gs://temp/db1.zip:             98.75 MiB/1.20
Uploading   gs://temp/db1.zip:             98.81 MiB/1.20
...and keeps repeating this until it uploads the entire 1.20 GB.
  

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

Когда я запускаю команду или скрипт из командной строки Windows (или из встроенного powershell), используя: powershell.exe -файл c:scriptsupload.ps1 затем он работает так, как ожидалось, показывая прогресс в одной строке:

 Resuming upload for file://E:dbdb1.zip
Uploading   gs://temp/db1.zip:             1.20 GiB/1.20 GiB
  

Раньше, когда я выполнял ту же команду без параметра ‘-o GSUtil:parallel_composite_upload_component_size = 0’, он показывал мне тот же длинный вывод, но как только я добавил это в gsutil, я подумал, что это нормально, поскольку он больше не повторяет прогресс в нескольких строках в командной строке PS. Так что это происходит только тогда, когда я запускаю скрипт из планировщика задач.

Есть идеи, почему это происходит и как я могу это обойти?

Комментарии:

1. Полученный результат верен. То, что вы видите в командной строке для «прогресса», — это несколько сообщений, просто они перезаписываются в одной строке снова и снова, что делает «кажущимся», что это однострочная запись, когда в реальном случае это несколько операторов вывода (ala. захваченный в вашем файле расшифровки). Единственный способ обойти это, если в программе есть переключатель, позволяющий не выводить прогресс, а только завершенные передачи.

2. cloud.google.com/storage/docs/gsutil/commands/… Проверьте это. По-видимому, переключатель -L предназначен для того, чтобы программа могла продолжить с того места, на котором она остановилась. Таким образом, не будет переключателя для создания отдельной строки для каждого загруженного файла. Однако должна быть возможность написать скрипт для фильтрации вашего файла журнала. Он когда-нибудь меняется на загруженный или завершенный, что-то в этом роде?

3. В настоящее время я пытаюсь отфильтровать его в строку $file… Пока у меня есть что-то вроде этого: $file = @(Get-Content -Path $Log). Где({ $_. Trim() -notin $pattern1 $pattern2 }) — но не уверен, как сохранить только 1-ю и последнюю строки «Загрузки» хода загрузки. Поэтому я думаю, что мне нужно было бы создать шаблон что-то вроде: $pattern1= @(‘Uploading*’), который я пробовал, но он находит строку только в том случае, если она точно соответствует строке в журнале. Подстановочные знаки не работают.

4. @Patrick Mcvay: Нет, это не так.

Ответ №1:

В репозитории gsutil есть запрос open feature, выпуск # 481, чтобы отключить счетчик прогресса, когда вывод направляется на что-то, что не является интерактивным терминалом.

Комментарии:

1. Спасибо, я этого раньше не видел. Сейчас мне нужно будет отфильтровать все строки, в которых есть «Загрузка gs: * из моей строки.