似乎是一个有点晚的答案,但为了帮助任何偶然发现这个问题的人,我也许可以就我必须做些什么来寻找用户并比较某些属性提供一些想法。我已将此示例用于与 SharePoint 相关的查询,但您显然可以将确切的原则应用于其他领域。
我为我的 SPWeb 获取了一组 SiteUser,然后在 foreach 中遍历所有用户并执行检查:如果我的用户的电子邮件地址存在于 SPUsers 集合中,则将该电子邮件地址添加到 SharePoint 列表中。以下是我将如何进行比较:
$item["Line Supervisor"] = $spweb.SiteUsers | ? { $_.Email -eq ($csvrow.LineManagerMail + "@domain.com")}
虽然这不能直接回答您的问题,但它可能会让您了解如何在 PowerShell 中使用 lambda 表达式来帮助您对数据执行快速检查,而不仅仅是对用户进行检查。如果你需要,我可以想出一些其他类似的例子。
下面是我最近在这个例子中使用的一个小片段:
从 CSV 文件将新用户添加到列表中
foreach ($csvrow in $icsv)
{
$rowCellNumber = $csvrow.CellNumber;
Write-Host($rowCellNumber);
$item = $users | ? {$_["Cell Number"] -eq $rowCellNumber}
If($item -eq $null)
{
$item = $linstance.AddItem();
Write-Host('New User Found - Creating ' + $rowCellNumber + '...');
$newitems = $newitems + 1; #this is only a flag to count new items
}
Else
{
Write-Host('Existing User Found - Updating ' + $rowCellNumber + '...');
$updateditems = $updateditems + 1; #this is only a flag to count updated items
}
#set spitem field values
$item["Title"] = $csvrow.FullName
$item["Line Manager"] = $spweb.SiteUsers | ? { $_.Email -eq ($csvrow.LineManagerMail + "@domain.com")}
$item.Update()
}