通过cygwin从Shell脚本运行时,如何将参数传递给Powershell脚本?

问题描述

我有sh脚本,可以说a.sh,其中我正在对Windows服务器(用cygwin配置)执行ssh并运行B.ps1脚本,该脚本采用a.sh中定义的参数。>

a.sh内容

var1="abc"
var2="xyz"

#sshing to windows Box
/usr/bin/scp -r -q /home/$user/Jenkins/workspace/job/jobname $user2@$x:/cygdrive/C/
/usr/bin/ssh $user2@$x 'powershell C:\\B.ps1 $var1 $var2'

这正在运行脚本,但是没有任何参数,当我在B.ps1中写入主机变量名称时,我得到空白输出,这意味着var1&var2值未传递到我的ps1脚本中。

B.ps1内容

$var1=$args[0]
$var2=$args[1]

Write-Host "var1 is:" $var1
Write-Host "var2 is:" $var2

我试图在我的sh脚本中使用双引号,但是没有用,似乎必须通过某种方式可以传递参数,但是语法上可能缺少任何内容

请帮助。

解决方法

/usr/bin/ssh $user2@$x "powershell C:/B.ps1 $var1 $var2"
  • 您需要双引号("...")而不是单引号('...')才能扩展壳变量引用$var1$var2

  • 通过使用/作为路径分隔符-PowerShell与\可以互换使用-避免了转义\字符的麻烦,而您必须转义这些字符从'...'过渡到"..."时> double ;也就是说,以下内容也可以工作:
    /usr/bin/ssh $user2@$x "powershell C:\\\\B.ps1 $var1 $var2"