嵌入 Powershell 脚本问题
Posted
技术标签:
【中文标题】嵌入 Powershell 脚本问题【英文标题】:Embedding in the Powershell script issue 【发布时间】:2015-07-07 09:26:11 【问题描述】:根据其他用户的建议创建此问题,它是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'.
现在,另一位用户告诉我,如果我要使用 double " 我需要转义内引号。据我所知,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 + 添加内容 "$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"'
对此的任何建议将不胜感激。
【问题讨论】:
您期待文件中的文字$HOMEPATH
还是环境变量扩展为什么?我的$HOMEPATH
是` which I don't think gets you the output you want. You are also using
$env:homepath`,这可能就是你要找的。span>
我希望它添加 $HOMEPATH 的内容,在我的例子中是下面的 $ echo $HOMEPATH \Users\我认为问题在于您希望在输出文件中使用文字 $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"')
【讨论】:
谢谢!不得不稍作改动,但它奏效了。我使用了 "add-content "$env:homepath\.proxy\TempProxy.bat" "alias proxyon='source"
$HOMEPATH/.proxy/proxy-switch.sh`"on'"" 代替。在第一组 '" 之后的 on 所以它给出了输出 "alias proxyon='source "$HOMEPATH/.proxy/proxy-switch.sh"on'" 我需要这样做,因为当它被输入到 GitBash 时将“On”解释为目录的一部分,而不是它所需的输入
@AdamCormack 很高兴为您提供帮助。您还可以使用格式运算符来消除对所有反引号的需要。更新了我的答案。以上是关于嵌入 Powershell 脚本问题的主要内容,如果未能解决你的问题,请参考以下文章
通过 PHP 使用 Exchange 管理单元执行 powershell 脚本
使用以下逻辑编写 Powershell 脚本的指南 [关闭]
无法在 Visual Studio Code 中调试 PowerShell 脚本
从 Powershell ISE 中的另一个 PS1 脚本调用 PowerShell 脚本 PS1
sql Powershell Migration工具http://stackingcode.com/blog/2011/10/12/database-migrations-with-powershel