Powershell - 从 CYGWIN 运行 SCP 命令,但也扩展变量

Powershell - 从 CYGWIN 运行 SCP 命令,但也扩展变量

SCP由于不能使用单引号,因此 我需要在运行命令之前扩展变量。如果我使用双引号运行脚本,Powershell ISE它可以正常工作。

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

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

这是需要使用 Cygwin bash 运行 SCP 的代码。

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

输出:

/usr/bin/bash: set -x;  /cygdrive/e/logs/myfolder/dir1/server.zip [email protected]:~/: No such file or directory

如果我在 Cygwin 中手动运行上述相同的命令,它就可以工作。

我甚至尝试使用bash -l -c,但后来 SSH 会话卡住了,可能是因为[email protected]根据文档,它变成了 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.

答案1

搞清楚了。使用时它停止运行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 [email protected]:~/")

相关内容