Назад | Перейти на главную страницу

Powershell - запускайте команду SCP из CYGWIN, но также расширяйте переменные

Мне нужно развернуть переменные перед запуском SCP команда, в результате я не могу использовать одинарные кавычки. Если я запустил скрипт, используя двойные кавычки в Powershell ISE работает нормально.

Но не работает, если я запускаю скрипт через командную строку.

Я использую zabbix для запуска скрипта, который вызывает скрипт как [cmd /C "powershell -NoProfile -ExecutionPolicy Bypass -File .\myscript.ps1"]

Вот код, который необходим для запуска SCP с помощью Cygwin bash.

if ((test-path  "$zipFile"))
{ 
C:\cygwin\bin\bash.exe -l "set -x; scp /cygdrive/e/logs/$foldername/dir1/$foldername.zip root@10.10.10.10:~/"
}

Вывод:

/usr/bin/bash: set -x;  /cygdrive/e/logs/myfolder/dir1/server.zip root@10.10.10.10:~/: No such file or directory

Если я запустил ту же команду в Cygwin вручную, она сработает.

Я даже пытался использовать bash -l -c но тогда сеанс SSH зависает, возможно, потому что root@10.10.10.10 становится $ 1 согласно документации.

Ссылка на документацию

   -c        If the -c option is present, then commands are read from
             the first non-option argument command_string.  If there are
             arguments after the command_string, the first argument is
             assigned to $0 and any remaining arguments are assigned to
             the positional parameters.  The assignment to $0 sets the
             name of the shell, which is used in warning and error
             messages.

Догадаться. Он останавливался при использовании bash -c был по причине StrictHostKeyChecking, то, что известно о хостах (где вам будет предложено ввести да / нет). Я установил -v переключиться на SCP и он показал мне журналы отладки, где он останавливался.

Пришлось установить scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null параметры.

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

c:\$cygwin_folder\bin\bash.exe -c ("/usr/bin/scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -v -i /cygdrive/c/cygwin/home/myuser/.ssh/id_rsa  /cygdrive/e/logs/$foldername/dir1/$foldername.zip root@10.10.10.10:~/")