我试图在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版等效命令来解决上述错误。谢谢。
答案 0 :(得分:1)
问题在于管道的这一部分:
? Value
如果您尝试确保Value属性不为null,则可以使用
? {$ _。值}
这应该没问题。它还匹配您稍后添加的内容($ _。Value)。