如何处理powershell脚本块中的引号



此代码按预期工作:

$var = "a123"
$script = @'
Add-Content C:temptest.txt -Value {{"{0}     name1"}}
Add-Content C:temptest.txt -Value {{"{0}     name2"}}
'@ -f $var
$command = [scriptblock]::Create($script)
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoExit -command & {$command}" -Wait

但当我将$var的值更改为"123"时,我会得到错误:

At line:1 char:49
+ & {Add-Content C:temptest.txt -Value {123     name1}
+                                                 ~~~~~
Unexpected token 'name1' in expression or statement.
At line:2 char:46
+ Add-Content C:temptest.txt -Value {123     name2}}
+                                              ~~~~~
Unexpected token 'name2' in expression or statement.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

我尝试过使用其他引号,将其转换为字符串,但我没有有效的解决方案。有人能帮忙吗?

我想我已经弄清楚了,发生了什么以及如何解决它。

问题是,一旦命令被传递给powershell.exe,当脚本块的第一个令牌没有被识别为字符串时,脚本块中的双引号就会以某种方式丢失。比较一下:

{123a     name1} # Returns a script block
{123      name1} # Fails with "UnexpectedToken" exception
{$true    name1} # Fails with "UnexpectedToken" exception

我不知道为什么会发生这种情况,但这就是你可以做的,解决它:

$var = "123"
$script = @'
Add-Content C:temptest.txt -Value {{'{0}     name1'}}
Add-Content C:temptest.txt -Value {{'{0}     name2'}}
'@ -f $var

当命令传递时,单引号会以某种方式得到维护,C:temptest.txt中的输出如下所示:

'123 name1'
'123 name2'

相关内容

  • 没有找到相关文章

最新更新