Power shell для скачивания папок через ftp - PullRequest
0 голосов
/ 21 июля 2010

У меня есть веб-приложение, которое генерирует и загружает документы (Word, PDF и т. Д.) На сервер. Сейчас я пишу сценарий Power Shell, который сначала перенесет эти файлы в папку ftp. Эта часть сделана. Второй скрипт будет запускаться на моем резервном сервере каждый день и загружать все папки / файлы с этого ftp-сервера на мой резервный сервер. Проблема в том, что я не могу загрузить папки. Его легко загружать файлы, но я не могу найти какой-либо фрагмент кода, который в основном позволяет мне либо загрузить всю папку (с содержимым), либо, по крайней мере, позволить мне перебирать содержимое папки.

Если бы я знал папки, то у меня не было бы проблемы, я мог бы просто жестко закодировать функцию для каждой папки, но документы загружались в динамические папки (имена папок генерируются приложением). Я просто знаю основную папку. Мне нужно пройти через это. И архивирование не очень хорошая идея, поскольку размер папки составляет около 1 гигабайта Не хочу каждый день передавать по 1 кабелю.

Любая помощь в этом отношении будет принята с благодарностью.

Спасибо.

----------- UPDATE --------

gci работает только для файлов в локальной системе (здесь я могу ошибаться). Я имею в виду перебор папок и файлов ftp.

Вот как я прохожу локально: $ GciFiles = gci C: \ ParentFolder \ SubFolder \ -recurse | Где {$ _. Attribute -ne "Directory"}

foreach ($ file in $ GciFiles) {}

Теперь это все отлично, так как foreach может дать мне имя папки и имя файла. Однако я хочу сделать то же самое с кодом FTP:

$ ftphost = "ftplocation \ Parentfolder \" учетные данные здесь сделать объект ftp_web_request

$ ftprequest.Method = [System.Net.WebRequestMethods + Ftp] :: ListDirectory $ ftpresponse = $ ftprequest.GetResponse () $ responseStream = $ ftpresponse.GetResponseStream () $ readStream = новый объект System.IO.StreamReader $ responseStream

while (($ line = $ readStream.ReadLine ()) -ne $ null) { $ line здесь дает нам имя файла # функция для загрузки файла }

Теперь все в порядке. ПРЕДОСТАВЛЯЕТСЯ, Я ЗНАЮ ПАПКУ, КОТОРУЮ Я ХОЧУ ЗАГРУЗИТЬ ФАЙЛЫ. в каждой папке GUID есть несколько файлов.

Как же я полагаю, что GCI по этому коду ???

То, что я сделал, было в том же коде, сначала получил имя каждой папки, затем имел другую функцию (то же самое, за исключением того, что теперь я знаю имя папки) и в этой функции, пока цикл загружает файлы. Однако это не работает. Сценарий просто продолжает выполняться. Я глубокая вода! Понятия не имею, что на земле делать!

1 Ответ

0 голосов
/ 22 июля 2010

есть десять.Просто используйте опцию -Recurse для Get-ChildItem

Да, кажется, что этот маршрут на самом деле не дает вам ту функциональность, которую вы ищете.Я подозреваю, что есть хакерский способ обойти это, потянув имя каталога на стороне сервера в строку, а затем создав идентичный dir на стороне клиента.лучше использовать что-то вроде net-cmdlets

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

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