SharePoint 2013是否有People Picker服务?PowerShell批量验证用户需求
没问题,我来帮你梳理清楚这个问题:
首先,SharePoint 2013里确实存在和People Picker相关的Web服务——PeoplePicker.asmx,它部署在每个Web应用的_vti_bin目录下(比如http://你的站点地址/_vti_bin/PeoplePicker.asmx)。这个Web服务提供了一系列方法来处理用户解析、搜索等操作,完全可以满足你批量验证用户是否存在的需求。
接下来,我给你一套用PowerShell调用这个Web服务来验证CSV中用户的具体方案:
步骤1:准备CSV文件
先整理好你的用户列表,CSV里只需要一列存储用户标识(比如用户主体名、邮箱或者显示名称),示例格式如下:
UserPrincipalName user1@contoso.com user2@contoso.com user3@contoso.com
步骤2:编写并运行PowerShell脚本
下面的脚本会读取CSV,调用PeoplePicker Web服务的ResolvePrincipals方法逐个验证用户,你只需要根据实际情况修改几个参数即可:
# 替换为你的SharePoint站点的PeoplePicker Web服务地址 $peoplePickerServiceUrl = "http://your-sharepoint-site/_vti_bin/PeoplePicker.asmx" # 加载Web服务代理,使用当前登录账号的权限 $peoplePickerProxy = New-WebServiceProxy -Uri $peoplePickerServiceUrl -UseDefaultCredential # 替换为你的CSV文件路径 $users = Import-Csv -Path "C:\temp\user-list.csv" # 循环处理每个用户 foreach ($user in $users) { # 这里假设CSV的列名为UserPrincipalName,如果你用的是DisplayName,改成$user.DisplayName即可 $userToCheck = $user.UserPrincipalName # 调用ResolvePrincipals方法验证用户 # 参数说明: # 1. principalNames: 要验证的用户标识数组 # 2. scopes: 搜索范围,空数组表示默认范围 # 3. sources: 数据源,空数组表示所有可用的身份源 # 4. inputIsEmail: 如果用户标识是邮箱,设为$true;如果是域名\用户名,设为$false # 5. identityType: 0表示不限类型,1表示仅用户,2表示仅组 $resolveResult = $peoplePickerProxy.ResolvePrincipals( @($userToCheck), @(), @(), $true, 0 ) # 解析返回结果 if ($resolveResult -and $resolveResult.Count -gt 0) { $resolvedItem = $resolveResult[0] if ($resolvedItem.Resolved) { Write-Host "✅ 用户 '$userToCheck' 存在,显示名称:$($resolvedItem.DisplayName)" -ForegroundColor Green } else { Write-Host "❌ 用户 '$userToCheck' 未在PeoplePicker中找到" -ForegroundColor Red } } else { Write-Host "⚠️ 用户 '$userToCheck' 验证请求失败,请检查服务地址或权限" -ForegroundColor Yellow } }
注意事项
- 请确保运行脚本的账号有访问目标SharePoint站点Web服务的权限,以及读取CSV文件的权限
- 如果你的用户标识是
域\用户名格式,记得把脚本里的inputIsEmail参数改成$false - 如果需要更精确的搜索范围,可以调整
scopes参数(比如指定特定的AD OU),不过空数组一般能满足大部分场景需求
内容的提问来源于stack exchange,提问作者Chandra
相关产品推荐
相关产品推荐

