SFTP с Powershell в пакетном скрипте - PullRequest
1 голос
/ 25 октября 2019

У меня есть пакетный скрипт, который запускается через schtasks каждую ночь на разных удаленных ПК с Windows (32-битный Windows 7 SP1). Этим компьютерам необходимо передавать файлы FTP на сервер Linux и с него. В настоящее время с использованием FTP пакетный скрипт работает просто отлично.

Теперь серверы Linux переключаются на использование только SFTP. Я хотел бы написать короткий сценарий PowerShell для SFTP тех же файлов на сервер и с сервера - у меня установлен Posh-Ssh для использования в PowerShell в этих системах Windows (версия PS 5.1).

В настоящее времячасть пакетного сценария, выполняющая FTP, выглядит следующим образом:

REM make temp file for FTP
echo open pos%STORE%               >  C:\temp\temp.txt
echo username                      >> C:\temp\temp.txt
echo password                      >> C:\temp\temp.txt
echo ascii                         >> C:\temp\temp.txt    
echo cd /path/to/use               >> C:\temp\temp.txt
echo put %USERDOMAIN%.ftp          >> C:\temp\temp.txt
echo put posdaily.txt posdaily.ftp >> C:\temp\temp.txt
echo get prod.txt                  >> C:\temp\temp.txt
echo get posdaily.ftp              >> C:\temp\temp.txt
echo quit                          >> C:\temp\temp.txt

REM **** FTP to put/get files from POS Server ****
echo First Try Connect to POS ....
ftp -iv -s:\temp\temp.txt >> C:\log\Daily.log  2>&1

Есть ли способ использовать тот же temp.txt, который создается для передачи имени пользователя / пароля / put / get в сценарий PowerShellчто использует Posh-Ssh? Какие изменения мне нужно внести в файл temp.txt?

Я могу вызвать отдельный пакетный сценарий, который запускает сценарий PowerShell - я делал это в предыдущих пакетных сценариях - но я не уверен, как написать сценарий PowerShell - какие команды / команды я буду использовать всценарий PowerShell для использования данных в temp.txt?

Если я включу его в PowerShell, я смогу вызвать тот же сценарий PowerShell в сценариях C # и VB, который должен делать то же самое.

1 Ответ

3 голосов
/ 25 октября 2019

Есть ли способ использовать тот же файл temp.txt, который создается для передачи имени пользователя / пароля / put / get в скрипт Powershell, использующий Posh-Ssh?

Неттебе нельзя. Posh-Ssh - это встроенный модуль PowerShell, который не использует сценарии, как ftp.

Также, как уже прокомментировал @SomethingDark, нет необходимости переключаться в PowerShell для SFTP. Даже для C # / VB.NET. В чем разница между вызовом сценария PowerShell и командного файла из C # / VB.NET?

Для SFTP в командном файле см .:
Безопасный FTP с использованиемПакетный скрипт Windows

Мой ответ там предлагает использовать (мой) WinSCP SFTP-клиент . А WinSCP может фактически использовать скрипт, похожий (хотя и не идентичный) на ftp. И есть руководство по преобразованию ftp сценария в сценарий WinSCP .


Хотя, если вы хотите иметь такой же / похожий код для PowerShell / C # / VB.NET,Вам лучше использовать сборку SFTP .NET. См. Библиотеки SFTP для .NET .

Если вам нужна собственная сборка .NET, я бы порекомендовал SSH.NET (хотя ее разработка прекратилась в последние несколько лет), И вы на самом деле уже используете это, не так ли?

WinSCP также имеет сборку .NET - но она не является полностью нативной. Чистая сборка. С другой стороны, WinSCP GUI может сгенерировать шаблон кода для SFTP для всех PowerShell, C # и VB.NET .

Хотя почему бы вам не реализовать перевод? функциональность в пользовательскую сборку и повторно использовать ее из всех PowerShell / C # / VB.NET?

...