2016-05-02 7 views
0

Ich habe die folgende Caml in Powershell. Wenn ich den $ Monat in der CAML Abfrage fest codiere, dann funktioniert es. Ist die Syntax richtig?CAML Query Filtering where Klausel

write-host $month 
$CAML = '<Where> 
     <Eq> 
      <FieldRef Name="Period" /> 
      <Value Type="Text">$month</Value> 
     </Eq> 
     </Where>' 

Antwort

2

In Powershell-Strings sind entweder erweiterbar (wie interpolierbaren Strings in Perl) oder wörtlichen.

Alles in Anführungszeichen eingeschlossen (") ist erweiterbar, während in Ihrem Fall einfache Anführungszeichen (') für Zeichenfolgenliterale verwendet werden.

$month = 'Jan' 
"First month is $month" # This will result in: First month is Jan 
'First month is $month' # This will result in: First month is $month 

Für mehrzeiligen Strings, verwenden Sie einen Heredoc (in der Regel hier-docs in anderen Sprachen genannt). Gleiche Regeln gelten:

$CAML = @" 
<Where> 
    <Eq> 
    <FieldRef Name="Period" /> 
    <Value Type="Text">$month</Value> 
    </Eq> 
</Where> 
"@ 

Wenn Sie ein Zeichenfolgenliteral verwenden möchten (dh, wenn die Zeichenfolge enthält andere Sonderzeichen oder wörtliche $ s, die Sie erhalten möchten.), Aber Sie müssen eine bestimmte Variable Wert einzufügen, verwenden das -f Format Betreiber as shown by @jisaak:

$CAML = @' 
<Where> 
    <Eq> 
    <FieldRef Name="Period" /> 
    <Value Type="Text">{0}</Value> 
    </Eq> 
</Where> 
'@ -f $month 

Um mehr über String-Erweiterung zu erfahren und unter Angabe finden Sie Get-Help about_Quoting_Rules

1

Ihre Variable wird nicht ersetzt, weil Sie einfache Anführungszeichen verwenden. Sie können entweder, doppelte Anführungszeichen verwenden oder einen Format-String (alias -f):

write-host $month 
$CAML = '<Where> 
     <Eq> 
      <FieldRef Name="Period" /> 
      <Value Type="Text">{0}</Value> 
     </Eq> 
     </Where>' -f $month 
+0

Danke für die schnelle Lösung. Es funktioniert. Ich lerne jedoch nur folgenden Code wird auch funktionieren. $ CAML = " \t \t \t \t \t \t \t \t \t \t \t $ ($ month) \t \t \t \t \t \t " –

0

Danke Jissak. Wollte nur folgenden Code teilen, da dieser auch funktioniert.

$CAML = "<Where> 
      <Eq> 
       <FieldRef Name='Period' /> 
       <Value Type='Text'>$($month)</Value> 
      </Eq> 
      </Where>" 
+1

In Ihrem Fall wird es auch ohne den Teilausdruck-Operator (' $() ') funktionieren. –