嵌入Powershell脚本问题

时间:2015-04-28 13:28:53

标签: powershell scripting git-bash

根据其他用户建议的建议创建此问题,这是this的后续跟进。

场景是我正在尝试创建一个Powershell脚本,首次运行的用户可以运行,该脚本将安装一堆程序并完成几个配置更改。其中一个配置更改是创建一个具有两个shell命令的文件(在下面发布),然后每次加载GitBash时都会执行该命令。

我尝试输入.sh文件的命令是..(使用"'删除)

alias proxyon=source $HOMEPATH/.proxy/proxy-switch.sh on

alias proxyoff=source $HOMEPATH/.proxy/proxy-switch.sh off

我尝试使用以下命令执行此操作

add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source "$HOMEPATH/.proxy/proxy-switch.sh on"'" 

但是,执行ps1脚本会引发错误,顶行是

Add-Content : A positional parameter cannot be found that accepts argument '/.proxy/proxy-switch.sh'.

现在,另一位用户告诉我,如果我要使用双"我需要逃避内部引号。我所知道的Powershell中的逃逸字符是`,所以我尝试了以下内容。

add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on"'" 

其中给出了以下内容

  

字符串开头:在C:\ Chef \ windowsdevbox-master \ test.ps1:2   焦炭:113   + add-content" $ {env:homepath} .proxy \ TempProxy.bat" " alias proxyon =' source`" $ HOMEPATH / .proxy / proxy-switch.sh on" <<<< '"是   错过终结者:'。

我也试过

add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on`"'" 

哪个没有错误但是,它不会添加$ HOMEPATH的内容,只会添加以下内容

alias proxyon='source "/.proxy/proxy-switch.sh on"'

对此的任何建议都会受到极大关注。

1 个答案:

答案 0 :(得分:2)

我认为问题是你想要输出文件中的文字$homepath以便让GitBash处理它。尝试逃避和处理这个问题的方法很多,但是让你最后一个与你完成几乎准备就绪的方法。

add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"`$HOMEPATH/.proxy/proxy-switch.sh on`"'" 

唯一不同的是$HOMEPATH前面的反击。由于PowerShell使用$来声明和引用变量,因此需要将其转义,就像使用引号一样,以防止PowerShell对其进行处理。

由于您没有名为$HOMEPATH的变量,因此在此时创建的值为null。这就是为什么你上一个例子的输出看起来像它的方式。

使用格式化运算符

可能更容易看到的另一个选择是使用格式运算符。如果你想暂时将它存储在变量中,你就可以拥有它。

$content = "alias proxyon='{0}'" -f 'source "$HOMEPATH/.proxy/proxy-switch.sh on"'
add-content "${env:homepath}\.proxy\TempProxy.bat" $content

或内联它将是

add-content "${env:homepath}\.proxy\TempProxy.bat" ("alias proxyon='{0}'" -f 'source "$HOMEPATH/.proxy/proxy-switch.sh on"')