1

我已经安装了 cygwin,我即将执行一个用 powershell 编写的脚本。我这样做:

powershell "& ""C:\my\script.ps1"""

这按预期工作,我必须这样做,因为在那个脚本中我正在执行另一个外部命令等等......

我想为该脚本添加一些环境变量,所以我想写一些类似的东西

powershell "$FOO="bar"; & ""C:\my\script.ps1"""

这样我就可以访问$FOO脚本中的变量并对其进行处理。这个想法是,如果未定义该变量,我将使用一些默认值。我知道这也可以通过一些环境变量来实现,或者我可以将这些变量放入配置文件(profile.ps1),但我想摆脱那个文件,所以我不需要,我可以用变量覆盖默认值我展示出。

但它说:

=bar : The term '=bar' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
At line:1 char:1

所以我在想这样的事情可以工作:

powershell { $web = "google.com" ; & ping.exe $web }

但它只适用于powershell控制台而不是cygwin,它说cygwin

-bash: syntax error near unexpected token `&'

所以它似乎&被视为 bash 字符。我试图以千种方式逃避它,例如

bash -c "'powershell { \$web = \"google.com\" ; & ping.exe \$web }'"

但这是输出

bash: powershell { $web = "google.com" ; & ping.exe $web }: command not found

谢谢你的提示。

更新

我能够做到这一点:

 powershell "Invoke-Command -ScriptBlock {\$env:FOO = \"google.com\" ; & ""C:\my\script.ps1"" }"

但是,当我尝试通过它为空来访问该FOO变量$env:FOO时,似乎我无法这样做,因为该脚本正在另一个范围内运行,或者...

4

1 回答 1

1

此命令会将环境变量从 cygwin ( $FOO="bar") 传递给 powershell,然后运行另一个dir env:列出环境变量的 powershell 命令 ()(证明已设置):

powershell "\$env:FOO=\"bar\";dir env:"

用您的脚本调用替换该dir env:部分,这应该适合您。

编辑:这是命令(引用略有不同),包括对外部脚本的调用:

powershell '$env:FOO="bar";& "C:\script name.ps1"'
于 2012-12-11T15:24:07.990 回答