Powershell - 运行 SCP 命令使用 CYGWIN 但也扩展变量

Powershell - Run SCP command using CYGWIN but also expand variables

我需要在 运行 执行 SCP 命令之前扩展变量,因此我无法使用单引号。如果我 运行 在 Powershell ISE 中使用双引号的脚本它工作正常。

但如果我通过命令提示符 运行 脚本,则不起作用。

我正在使用 zabbix 来 运行 调用脚本的脚本 [cmd /C "powershell -NoProfile -ExecutionPolicy Bypass -File .\myscript.ps1"]

这是需要使用 Cygwin 运行 SCP 的代码 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。

Documentation link

   -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 [=13=] and any remaining arguments are assigned to

             the positional parameters.  The assignment to [=13=] sets the

             name of the shell, which is used in warning and error

             messages.

想通了。当使用 bash -c 时,由于 StrictHostKeyChecking,已知主机的问题(您会收到键入 yes/no 的提示)而停止。我将 -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:~/")