我在PowerShell中有以下caml。如果我在CAML查询中对$月进行硬编码,那么它就可以工作。我使用的语法是否正确?CAML查询过滤where子句
write-host $month
$CAML = '<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">$month</Value>
</Eq>
</Where>'
我在PowerShell中有以下caml。如果我在CAML查询中对$月进行硬编码,那么它就可以工作。我使用的语法是否正确?CAML查询过滤where子句
write-host $month
$CAML = '<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">$month</Value>
</Eq>
</Where>'
在PowerShell中,字符串或者是扩张(在Perl插补字符串),或文字。
任何用双引号括起来的东西("
)都是可扩展的,而单引号('
)用于字符串文字,就像你的情况一样。
$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
对于多行字符串,请使用here-string(通常在其他语言中称为here-docs)。适用同样的规则:
$CAML = @"
<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">$month</Value>
</Eq>
</Where>
"@
如果你想用一个字符串(即如果字符串包含要保留其他特殊字符或文字$
秒),但你需要插入一个特定的变量值,使用在-f
格式操作as shown by @jisaak:
$CAML = @'
<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">{0}</Value>
</Eq>
</Where>
'@ -f $month
要了解更多关于字符串扩张和报价,请参阅Get-Help about_Quoting_Rules
您的变量不会被替换,因为您使用的是单引号。你要么可以使用双引号,或者格式字符串(化名-f
):
write-host $month
$CAML = '<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">{0}</Value>
</Eq>
</Where>' -f $month
谢谢Jissak。只是想分享下面的代码,因为这个工程也是如此。
$CAML = "<Where>
<Eq>
<FieldRef Name='Period' />
<Value Type='Text'>$($month)</Value>
</Eq>
</Where>"
在你的情况下,它会工作没有子表达式运算符('$()')为好。 –
感谢您的快速修复。其作品。不过,我刚刚学习下面的代码也会起作用。 $ CAML =“ \t \t \t \t \t \t \t \t \t \t \t <值类型= '文本'> $($月) \t \t \t \t \t \t “ –