Powershell V2.0错误:无法绑定参数' FilterScript'

时间:2016-05-24 01:01:53

标签: powershell powershell-v2.0

我试图在Powershell中创建一个字典。这是我正在处理的剧本,

    $environmentId = "Test"
    $Dictionary = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]"
    $xml = [xml] (Get-Content "deploy.config")     
    $xml.SelectNodes("descendant::configuration/environment[@id='$($environmentId)']/descendant::text()[normalize-space()]") | ? Value | % { 
     $Dictionary.Add($_.ParentNode.ToString(), $_.Value)  
    }
write-output $Dictionary

此脚本在Powershell 4.0版中运行。但目前我们正在使用2.0版。当我在2.0版本上运行此脚本时,抛出以下错误,

Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert the "Value" value of type "System.String" to type "System.Management.Automation.ScriptBlock".
At C:\Users\pwsp_kkumar\Desktop\dictionary.ps1:6 char:129
+     $xml.SelectNodes("descendant::configuration/environment[@id='$($environmentId)']/descendant::text()[normalize-spa
ce()]") | ? <<<<  Value | % {
    + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand

有人可以建议我使用Powershell 2.0版等效命令来解决上述错误。谢谢。

1 个答案:

答案 0 :(得分:1)

问题在于管道的这一部分:

? Value

如果您尝试确保Value属性不为null,则可以使用

? {$ _。值}

这应该没问题。它还匹配您稍后添加的内容($ _。Value)。