【问题标题】:ExecutionContext.InvokeCommand.ExpandString throws exception in PowerShell 4.0ExecutionContext.InvokeCommand.ExpandString 在 PowerShell 4.0 中引发异常
【发布时间】:2015-04-16 04:05:36
【问题描述】:

我有一个脚本如下

[string]$newValue = Get-ConfigurationByType $setting.Value

这一行之后,$newValue 的值为

“http://ST-$($partner.Alias).vardiaforsakring.se/CardPaymentAgreementCallback.aspx”

在循环中,我调用 ExpandString

foreach ($partner in $partners) { $partnerSpecificValue =$ExecutionContext.InvokeCommand.ExpandString($newValue) }

抛出异常

使用“1”参数调用“ExpandString”的异常:“对象引用未设置为对象的实例。”
在 C:\Programs\Drops\Hydra_SE_v1.28\HydraDeploymentFunctions.ps1:342 char:5
+ $partnerSpecificValue = $ExecutionContext.InvokeCommand.ExpandString($newVal ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NullReferenceException

但是当我尝试输入硬编码字符串时,它会毫无例外地返回预期结果

$partnerSpecificValue =$ExecutionContext.InvokeCommand.ExpandString("http://ST-$($partner.Alias).vardiaforsakring.se/CardPaymentAgreementCallback.aspx")

$partnerSpecificValue 的值为

http://ST-secure.vardiaforsakring.se/CardPaymentAgreementCallback.aspx

有人知道解决此错误的解决方法吗?非常感谢。我在 Windows Server 2012 R2 上运行 PowerShell v4.0。

【问题讨论】:

  • 您使用什么模块?那是“spockframework”吗?也许在问题中添加一些细节。你得到的错误只是告诉你 $newValue 是空的。
  • 您好 Jan,我只是使用记事本编写了一个脚本,然后通过 PowerShell 运行该脚本。我不知道什么是“spockframework”
  • 硬编码时,它可以工作,因为您使用双引号 (") 字符串,它会在传递给 ExpandString 之前进行插值。如果您使用单引号 (') 传递字符串 -你会看到同样的 NullReferenceException

标签: powershell powershell-4.0


【解决方案1】:

ExpandString 有问题,在一般情况下无法正常工作。我改用这种方法:

function render() {
    [CmdletBinding()]
    param ( [parameter(ValueFromPipeline = $true)] [string] $str)

    "@`"`n$str`n`"@" | iex
}

例子:

$x=@{test='test'}
'Hashtable x contains value $($x.test)' | render

【讨论】:

  • 很好的答案,但你能解释一下它是如何/为什么起作用的吗?
  • 它将 HERE DOC 字符串发送到 Invoke-Expression。字符串可以包含 Posh 变量。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多