2016-05-24 5 views
1

Ich versuche, ein Wörterbuch in Powershell zu erstellen. Hier ist das Skript, ich arbeite,Powershell V2.0 Fehler: Kann Parameter 'FilterScript' nicht binden

$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 

Dieses Skript in Powershell Version 4.0 arbeitet. Derzeit verwenden wir jedoch Version 2.0. Als ich das Skript auf Version 2.0 laufen, werfen folgenden Fehler,

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 

Kann jemand bitte machen Sie mir den entsprechenden Befehl Powershell Version 2.0, den obigen Fehler zu beheben. Vielen Dank.

Antwort

1

Das Problem mit diesem Teil der Pipeline ist:

? Value 

Wenn Sie versuchen, um sicherzustellen, dass die Value-Eigenschaft nicht null ist, könnten Sie

verwenden? {$ _. Wert}

Das sollte mit keinem Problem funktionieren. Es entspricht auch, was Sie später hinzufügen ($ _. Value).

+0

Ausgezeichnet. Das hat mein Problem behoben. Ich danke dir sehr. – mahesh