我正在执行带有一个字符串参数的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获得预期的输出。
答案 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