将带有$的字符串传递到Powershell脚本参数中

时间:2019-10-14 19:48:19

标签: powershell

我有一个名为script.ps1的powershell脚本

它接受一个名为-myString-myOut的参数。

如何将$Test之类的字符串正确地传递到-myString中?

我尝试过

script.ps1 -myString '$test1' -myOut 3
script.ps1 -myString "$test1" -myOut 3

但都只是假设$ test是另一个参数名称,而我错过了-myOut

编辑:反引号没有出现在SO中,但我将它们包括在内。

Edit2:

param (
  [string]$myString= “”, 
  [string]$myOut= “”
)

Write-Host "Hello $myString $myOut"

执行示例:

Script.ps1 -myString ‘$test’ -myOut 3

无法回忆确切的输出,但它类似于: 你好3

1 个答案:

答案 0 :(得分:3)

如果您在$前面加了一个反引号,则可以使用双引号。

但是通常的方法是使用单引号:-myString "`$test1"

请注意,单引号版本应在字符串值的两边带有两个相同的直撇号(-myString '$test1'),而不是反引号(')。

对于双引号或单引号版本,您可以使用卷曲的Unicode引号字符(与SmartQuotes在Word中提供的字符相同),但是这些字符仅在您的会话中有效使用Powershell识别为Unicode的语言环境设置运行。如果存在区域设置不匹配,Windows将无法正确解释此类引号(或任何其他非ASCII字符)。

因此,假设您使用的标点符号与会话的文本编码匹配,那么这些方法应该对您有效,就像在这里为我所做的一样:

`

请注意,无论您使用哪种双引号,用于转义美元符号的反引号始终必须是ASCII反引号PS /> type foo.ps1 # the test script param($myString, $myOut) Write-Host "myString=$myString, myOut=$myOut" PS /> ./foo.ps1 -myString "`$test1" -myOut 3 # ASCII double-quotes myString=$test1, myOut=3 PS /> ./foo.ps1 -myString “`$test1” -myOut 3 # Unicode double-quotes myString=$test1, myOut=3 PS /> ./foo.ps1 -myString '$test1' -myOut 3 # ASCII single-quotes myString=$test1, myOut=3 PS /> ./foo.ps1 -myString ‘$test1’ -myOut 3 # Unicode single-quotes myString=$test1, myOut=3 ; Powershell无法识别与该字符等效的卷曲Unicode。