如果现有的字符串传递,Invoke-Expression命令正在替换$

时间:2016-03-28 10:53:10

标签: c# windows powershell cmd

我正在执行带有一个字符串参数的ps1文件。 String参数本身包含$。在与某些字母表结合后,它将其视为变量。

描述:

$variableWithDolar = 'Test$Var'
$inputString = "Testing with " + "`'$variableWithDolar`'" 
$inputString = '"' + $inputString + '"'
$scriptPath="C:\test\PrintArg.ps1"
Invoke-Expression -Command "& `"$scriptPath`" $inputString"

这里PrintArg.ps1是一个powershell脚本,它只接受一个字符串参数并打印出来。

预期输出:"使用Test $ Var"进行测试 实际输出:"使用测试"

进行测试

因为它将$ Var视为空变量。

任何人都可以帮助我,我将如何使用Invoke-Expression获得预期的输出。

1 个答案:

答案 0 :(得分:1)

一种方法是添加单引号以防止Powershell尝试替换$ Var。在双引号字符串中,Powershell将执行变量替换。在第一行将双引号更改为单引号,并在最后一行的$ inputString周围添加单引号:

$variableWithDolar = 'Test$Var'
$inputString = "Testing with " + $variableWithDolar 
$scriptPath="C:\temp\PrintArg.ps1"
Invoke-Expression -Command "& `"$scriptPath`" '$inputString'"

Poweshell中的报价可能很棘手,请查看文档以获取完整说明:https://technet.microsoft.com/en-us/library/hh847740.aspx