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

PowerShell多层foreach循环导出CSV的输出格式调整问询

SharePoint站点用户导出脚本调整方案

原脚本仅能导出带USERS表头的单列用户数据,调整后可实现按站点分组、无表头逐行排列的导出效果,导出文件内容顺序为「站点地址→站点下所有用户登录名→下一个站点地址→对应用户」。

调整后完整脚本

Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
# 配置待读取的站点列表CSV路径
[parameter(Mandatory=$false)][string]$CsvFilePath = ".\AllSiteCollectionsLocal.csv"
$csvItems = Import-Csv $CsvFilePath
$resultsarray = @()

# 遍历CSV中记录的每个站点集合
foreach($Item in $csvItems)
{   
    $site = New-Object Microsoft.SharePoint.SPSite($Item.SiteCollection)
    $web = $site.OpenWeb()
    $siteUsers = $web.SiteUsers
    Write-Host $Item.SiteCollection -ForegroundColor Green

    # 优先写入当前站点地址作为分组标识行
    $resultsarray += $Item.SiteCollection

    # 逐行追加当前站点下的所有用户登录名
    foreach($user in $siteUsers)
    {
        Write-Host $user.LoginName
        $resultsarray += $user.LoginName
    }

    $web.Dispose()
    $site.Dispose()
}

# 所有内容收集完成后一次性导出为无表头纯文本格式
$resultsarray | Out-File -Path c:\temp\sitesandusers.csv -Encoding UTF8

关键改动说明

  • 删除了原脚本中创建带USERS属性PSObject的逻辑,不再生成结构化列数据,直接收集需要逐行展示的纯文本内容,从根源上避免CSV表头生成
  • 调整内容写入顺序:外层循环处理每个站点时,先把站点地址写入结果集,再遍历追加该站点下的所有用户,自动实现按站点分组的排列效果
  • 把文件导出操作移到所有站点遍历完成后执行,修复原脚本每次内层循环结束就重复覆盖导出文件的逻辑bug
  • 改用Out-File做纯文本导出,指定UTF8编码避免特殊字符乱码,导出的csv文件完全符合无表头、逐行分组的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:33:18