嵌入Powershell脚本问题

Embedding in the Powershell script issue

根据另一位用户的建议创建此问题,它是 的跟进。

场景是我目前正在尝试创建一个 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'.

现在,另一个用户告诉我,如果我要使用 double ",我需要转义内部引号。据我所知,Powershell 中的转义字符是 ` ,所以我有尝试了以下方法。

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

给出了以下内容

The string starting: At C:\Chef\windowsdevbox-master\test.ps1:2 char:113 + add-content "${env:homepath}.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on" <<<< '" is missing the terminator: '.

我也试过了

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"'

如有任何建议,我们将不胜感激。

我认为问题在于您希望输出文件中的文字 $homepath 以便让 GitBash 处理它。有很多方法可以尝试逃避和处理这个问题,但让我们与您一起工作,您制作的最后一个 almost 就绪。

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"')