【发布时间】:2016-03-28 10:53:10
【问题描述】:
我正在执行一个带有一个字符串参数的 ps1 文件。字符串参数本身包含 $ 。它与某些字母组合后将其视为变量。
说明:
$variableWithDolar = 'Test$Var'
$inputString = "Testing with " + "`'$variableWithDolar`'"
$inputString = '"' + $inputString + '"'
$scriptPath="C:\test\PrintArg.ps1"
Invoke-Expression -Command "& `"$scriptPath`" $inputString"
这里的 PrintArg.ps1 是一个 powershell 脚本,它只接受一个字符串参数并打印它。
预期输出:“使用 Test$Var 进行测试” 实际输出:“Testing with Test”
因为它将 $Var 视为空变量。
谁能帮助我如何使用 Invoke-Expression 获得预期的输出。
【问题讨论】:
-
你为什么首先使用
Invoke-Expression? -
@PetSerAl 因为我需要使用这些参数执行一些脚本
-
& $scriptPath $inputString。为什么Invoke-Expression? -
@PetSerAI 感谢您的反馈。你是对的,这样我就可以实现我正在寻找的东西,但是因为我在已经存在的代码中创造了机会,所以我需要理解为什么使用这个 Invoke-Expression 而不是这个 Invoke-Expression。你能告诉我用invoke-expression实现这一点的任何方法吗
-
你可以写:
Invoke-Expression '& $scriptPath $inputString',但这有点没有意义。如果你真的想在应用Invoke-Expression之前将变量值嵌入到字符串中,那么你需要这样的东西:Invoke-Expression "& '$($scriptPath -replace "['‘’‚‛]", '$&$&')' '$($inputString -replace "['‘’‚‛]", '$&$&')'"。在 PowerShell v5 中,您可以使用[System.Management.Automation.Language.CodeGeneration]::EscapeSingleQuotedStringContent而不是-replace。
标签: c# windows powershell cmd