【问题标题】:PowerShell: Double Quotes using $ExecutionContext.InvokeCommand.ExpandString($var)PowerShell:使用 $ExecutionContext.InvokeCommand.ExpandString($var) 的双引号
【发布时间】:2012-11-16 23:10:57
【问题描述】:

好的,我已经编写了一个在 Windows 8 中完美运行的脚本。我切换到 Windows 7 并获得了各种血液。经过一番调试,我发现了问题所在。 Win 8 使用 PowerShell 3.0,Win 7 使用 PowerShell 2.0 并且 PowerShell 3.0 允许您在使用时使用双引号:

$ExecutionContext.InvokeCommand.ExpandString($var)

由于我的代码严重依赖于此,其中许多字符串使用双引号,因此我正在尝试寻找解决方案。

Here-Strings 不起作用,因为我的一些字符串是这样的:

$var = 'this is a "sample" of $one of my strings'

here-string 解决方法仅在我输出到文本文件时才有效,这是我不想要的,因为我在函数中大量使用此代码。

我在微软的网站上发现了一个与此相关的错误。它在 PowerShell 3.0 中的工作方式是它最初的工作方式。此外,将 Windows 7 升级到 PowerShell 3.0 也是不可能的。

【问题讨论】:

  • 我刚刚升级了我的 Powershell 版本,我现在正在使用 Powershell 3 运行 windows 7,并且字符串已正确展开。

标签: parsing variables powershell


【解决方案1】:

您可以测试小于 3 的 PowerShell 版本,然后转义任何双引号,如下所示:

C:\PS> if ($PSVersionTable.PSVersion.Major -lt 3) { $var = $var -replace '"','`"' }

C:\PS> $ExecutionContext.InvokeCommand.ExpandString($var)
this is a "sample" of one baby of my strings

【讨论】:

  • Keith 一如既往,您的解决方案非常出色。非常感谢,这完全符合我的需要。
【解决方案2】:

用双引号将 $var 括起来怎么样?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2021-07-22
    • 2022-10-17
    • 1970-01-01
    相关资源
    最近更新 更多