通过PowerShell.exe命令使用双引号传递空字符串

时间:2014-07-13 18:41:47

标签: powershell powershell-v3.0

看起来像一个错误...我唯一能想到的是双引号通过外部调用丢失但是当字符串有一个字符时它会起作用,所以我不这么认为。零长度字符串失败。

我的版本:

>$host
Name             : ConsoleHost
Version          : 3.0

空字符串失败:

> powershell.exe -command '&{write-host ""}'
    The string is missing the terminator: ".
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

如果字符串包含字符,则工作:

> powershell.exe -command '&{write-host "a"}'
a

独立工作:

> &{write-host ""}
<blank line>

使用反向引号:

>powershell.exe -command "&{write-host ''}"
<blank line>

正如@Ansgar指出逃避的作品(\ notn并未记录在powershell.exe /?中)

> powershell.exe -command '&{write-host \"\"}'
<blank line>

1 个答案:

答案 0 :(得分:0)

它似乎正在使用at-string解析器。该命令最终成为:

@"'&{write-host ""}'"

减少到

'&{write-host "}'

替代方案是:

# Like you said, escape the string
powershell.exe -command '&{write-host \"\"}'

# Use a script block instead of a string
powershell.exe -command {write-host ""}

您可能还会考虑使用Base64编码命令,但我从来没有这样做过。