gsutil - cp не обрабатывает каждый элемент в конвейере - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь создать небольшой скрипт Powershell, который будет копировать список файлов, соответствующих определенному условию, в указанное хранилище GCP.Я получил это далеко:

Get-ChildItem $Path | Where-Object { $_.psiscontainer -and $_.LastWriteTime -gt $Age } | Select-Object -ExpandProperty FullName | ft -hidetableheaders | gsutil -m cp -L log.log -r -n -I gs://bucket

Но это только загружает содержимое первой папки в списке.Я попытался использовать объект foreach в команде gsutil, но получаю сообщение об ошибке из-за того, что не могу найти URL для загрузки.При записи вывода foreach в консоль вывод выглядит совершенно пустым.

Я подтвердил, что вся строка без команды gsutil возвращает правильные папки из пути, поэтому я знаю, что данныесобирается в трубопровод.Но я не уверен, почему gsutil рассматривает только первый элемент в процессе разработки.

Любая помощь будет принята с благодарностью, и спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 19 июля 2018

Как уже сказал Ансгар Вичерс, не используйте командлеты Format-*, если у вас нет особой необходимости отображать форматированный вывод пользователю.Если он все еще копирует только первый каталог, параметр -I может работать не так, как должен.Попробуйте ... | ForEach-Object { gsutil -m cp -n -r $_ gs://... } вместо.

0 голосов
/ 22 мая 2018
Папка

Моя "c:\temp" имеет две дочерние папки.Когда я запускаю Get-ChildItem "c:\temp" | Where-Object {$_.psiscontainer} | Select-Object -ExpandProperty FullName | ft -hidetableheaders, Powershell выводит имена двух дочерних папок в c:\temp на консоль:

C:\temp\child folder A
C:\temp\child folder B

Однако , если вы захватили выходные данные команды иИзучите тип данных каждого выходного пути, и вы увидите, что они не являются строками , и я думаю, что gsutil требует строку в качестве входных данных при использовании -I (я думаю, Ansgar Wiechers's комментарий правильный)

Запустите это:

$x = Get-ChildItem "c:\temp"| Where-Object {$_.psiscontainer} | Select-Object -ExpandProperty FullName | ft -hidetableheaders 
write-host $x.Count
$x[0] | get-member

В моем случае я вижу количество 2, как и ожидалось (две дочерние папки)

Однако , тип данныхпервый элемент не является строкой, это FormatEntryData:

$x[0] | get-member

показывает на консоли следующее:

TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData

Если вы удалите часть команды | ft -hidetableheaders, тип данных каждого элемента - строка

Выполните это:

$x = Get-ChildItem "c:\temp"| Where-Object {$_.psiscontainer} | Select-Object -ExpandProperty FullName 
write-host $x.Count
$x[0] | get-member

Вы увидите тип данных TypeName: System.Stringдля $x[0]

Работает ли это с gsutil?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...