我有这样的PowerShell功能(我在这里简化了它以使其更容易理解):
Function QueryList
{
param(
[Parameter(Mandatory=$true,Position=1)]
[Microsoft.SharePoint.SPList] $list
[Parameter(Mandatory=$true,Position=2)]
[string] $camlQuery
)
$itemsQry = New-Object Microsoft.SharePoint.SPQuery
$itemsQry.Query = $camlQuery
$itemsQry.ViewFieldsOnly = $false
$itemsQry.RowLimit = 0
$itemsQry.ViewAttributes = "Scope='Recursive'"
return $list.GetItems($itemsQry)
}
Function MigrateList
{
param(
[Parameter(Mandatory=$true,Position=1)]
[Microsoft.SharePoint.SPList] $list,
[Parameter(Mandatory=$true,Position=2)]
[string] $matchingItemsQuery
)
foreach ($listItem in $list.Items)
{
# get items using the query (how to inject '$listItem' into query string?)
$targetItem = QueryList -list $list -camlQuery $matchingItemsQuery
# do something with matching items
...
}
}
# main script
$matchingItemsQuery = "<Where><Eq><FieldRef Name='Title' /><Value Type='TEXT'>`$(`$listItem[`"Title`"])</Value></Eq></Where>"
$targetItems = MigrateList -list $listXy -matchingItemsQuery $matchingItemsQuery
如您所见,我想查询列表中的某些项目,以匹配给定的条件。随着条件从列表更改为列表我希望能够将查询传递给函数,在查询内部有一个对变量的引用,该变量仅存在于&lt; MigrateList&#39;功能 n(此处:$listItem
)。
就像现在一样,变量当然不会被评估为对象值(&#34;标题&#34; $ listItem的列值),因为它作为字符串传递,如&#39; $ &#39;被转义(将查询传递给函数所需的)。
我知道它可能不是最好的构造,但它可以完成工作。那么我怎样才能更改传递的查询字符串将用$ listItem对象注入的脚本(在本例中为列值)?
答案 0 :(得分:0)
感谢您的评论,尤其是@ TheIncorrigible1,以获取有关使用脚本块的提示,我已经(已成功)尝试实施。
我得到了它的工作:
property