当通过 cygwin 从 shell 脚本 运行 时,如何将参数传递给 powershell 脚本?

how to pass parameter to a powershell script when running from a shell script through cygwin?

我有 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"
  • 您需要双引号 ("...") 而不是单引号 ('...') 以便 shell-variable 引用 $var1$var2待扩展。

  • 通过使用 / 作为路径分隔符——PowerShell 可以将其与 \ 互换——你可以避免转义 \ 字符从 '...' 过渡到 "..." 时必须 加倍 ;也就是说,以下内容也有效:
    /usr/bin/ssh $user2@$x "powershell C:\\B.ps1 $var1 $var2"