我有这样一个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)
{
$targetItem = QueryList -list $list -camlQuery $matchingItemsQuery
...
}
}
$matchingItemsQuery = "<Where><Eq><FieldRef Name='Title' /><Value Type='TEXT'>`$(`$listItem[`"Title`"])</Value></Eq></Where>"
$targetItems = MigrateList -list $listXy -matchingItemsQuery $matchingItemsQuery
如您所见,我想从列表中查询一些符合给定条件的项目。随着标准从一个列表到另一个列表的变化
我希望能够将查询传递给函数,在查询中有一个对变量的引用,该变量只存在于“MigrateList”函数中
n(此处:
$listItem
).
现在,变量当然不会被计算为objects值($listItem的“Title”列值),因为它是作为字符串传递的,因为“$”是转义的(将查询传递给函数时需要转义)。
我知道这可能不是最好的构造,但它会完成工作。那么,我如何更改传递的查询字符串将被注入$listItem对象(在本例中为列值)的脚本呢?