You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell或stsadm导出SharePoint 2007服务器场完整用户列表

SharePoint 2007 全服务器场用户列表导出方案

以下两种方案均可实现遍历所有站点、子站点导出完整用户列表,均需要在 SharePoint 2007 服务器场的Web前端或应用服务器上执行:

方案1:PowerShell调用SharePoint对象模型导出(推荐)

该方案可自动去重,直接输出结构化的CSV文件,方便后续新旧账号匹配:

# 加载SharePoint 2007核心程序集
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
# 自定义导出文件的保存路径
$exportPath = "C:\SP2007_Full_Users.csv"
# 初始化哈希表用于按登录名去重
$uniqueUsers = @{}

# 读取当前服务器场配置
$spFarm = [Microsoft.SharePoint.Administration.SPFarm]::Local
# 提取场中所有Web应用程序
$allWebApps = $spFarm.Services | Where-Object {
    $_.GetType().FullName -eq "Microsoft.SharePoint.Administration.SPWebService"
} | ForEach-Object { $_.WebApplications }

# 逐层遍历Web应用、站点集、子站点
foreach ($webApp in $allWebApps) {
    foreach ($site in $webApp.Sites) {
        foreach ($web in $site.AllWebs) {
            foreach ($user in $web.Users) {
                # 仅保留未记录过的用户
                if (-not $uniqueUsers.ContainsKey($user.LoginName)) {
                    $userObj = New-Object PSObject -Property @{
                        旧域登录名 = $user.LoginName
                        用户显示名 = $user.Name
                        联系邮箱 = $user.Email
                        所属站点地址 = $web.Url
                    }
                    $uniqueUsers[$user.LoginName] = $userObj
                }
            }
            # 释放站点资源避免内存泄漏
            $web.Dispose()
        }
        $site.Dispose()
    }
}

# 导出结果到CSV文件
$uniqueUsers.Values | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8
Write-Host "用户列表导出完成,文件保存路径:$exportPath"

注意事项:

  • 运行前必须使用 SharePoint 场管理员权限启动PowerShell,否则无法读取场配置和站点信息
  • 如果需要保留每个用户在不同站点的权限记录,删除哈希表去重逻辑,直接把用户对象加入列表导出即可
  • 环境需要提前安装PowerShell 2.0及以上版本(SharePoint 2007默认适配PowerShell 2.0)

方案2:stsadm结合批处理遍历导出

如果服务器环境无法使用PowerShell,可使用该方案:

  1. 首先导出场中所有站点的URL列表,执行stsadm命令:
    stsadm -o enumallwebs -includewebparts > C:\All_Webs_List.xml
  2. 从生成的XML文件中提取所有<Web>节点的Url属性值,保存为每行一个URL的文本文件C:\All_Web_Urls.txt
  3. 编写批处理脚本遍历所有站点调用enumusers导出用户:
@echo off
set output=C:\SP2007_All_Users.txt
if exist %output% del %output%
for /f "delims=" %%i in (C:\All_Web_Urls.txt) do (
    echo ===== 站点地址:%%i ===== >> %output%
    stsadm -o enumusers -url %%i >> %output%
    echo. >> %output%
)
echo 所有站点用户导出完成

注意事项:

  • stsadm命令默认位于C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN目录,需切换到该目录执行,或者将该目录加入系统环境变量
  • 该方案导出的用户会存在重复记录,后续可自行按登录名去重处理

内容的提问来源于stack exchange,提问作者D K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:15:03