【问题标题】:Sharepoint Site, Groups, User, Permissons export 2 CSVSharepoint 站点、组、用户、权限导出 2 CSV
【发布时间】:2022-01-03 13:18:17
【问题描述】:

我找到了以下 Powershell 脚本。该脚本仅适用于导出到 CSV 更改数据的顺序。在 CSV 中,用户是第一位的,然后是脚本中的其他值。我不再知道如何改变它。也许你们中的某个人有一个想法。

$AdminCenterURL = "https://contoso-admin.sharepoint.com/"
$CSVPath = "C:\Temp\sharepoint.csv"
 
Connect-SPOService -url $AdminCenterURL 
 
$GroupsData = @()
 
Get-SPOSite -Limit ALL | ForEach-Object {
    Write-Host -f Yellow "Processing Site Collection:"$_.URL
  
    $SiteGroups = Get-SPOSiteGroup -Site $_.URL
 
    Write-host "Total Number of Groups Found:"$SiteGroups.Count
 
    ForEach($Group in $SiteGroups)
    {
        $GroupsData += New-Object PSObject -Property @{

            'Site URL' = $_.URL
            'Group Name' = $Group.Title
            'Permissions' = $Group.Roles -join ","
            'Users' =  $Group.Users -join ","
        }
    }
}

$GroupsData | Export-Csv $CSVPath -NoTypeInformation -encoding utf8
 
Write-host -f Green "Groups Report Generated Successfully!"

导出应按以下顺序:

网站网址、组名、权限,最后是所有用户

【问题讨论】:

    标签: powershell csv sharepoint permissions


    【解决方案1】:

    属性在您的代码中出现的顺序是随机的,因为您构造对象输出的方式:一个从哈希表中获取其属性的新对象。 (在 Hashtable @{} 中,属性没有固定的顺序)

    您可以通过输出 PsCustomObjects 轻松更改它以生成您需要的订单。
    下面,还直接捕获变量$GroupsData 中的输出,这比在数组上使用+= 加法要好得多。

    $GroupsData = Get-SPOSite -Limit ALL | ForEach-Object {
        Write-Host "Processing Site Collection: $($_.URL)" -ForegroundColor Yellow
    
        $SiteGroups = Get-SPOSiteGroup -Site $_.URL
        Write-host "Total Number of Groups Found: $($SiteGroups.Count)"
    
        foreach($Group in $SiteGroups) {
            [PsCustomObject]@{
                'Site URL'    = $_.URL
                'Group Name'  = $Group.Title
                'Permissions' = $Group.Roles -join ","
                'Users'       = $Group.Users -join ","
            }
        }
    }
    
    $GroupsData | Export-Csv $CSVPath -NoTypeInformation -Encoding utf8
    

    同样可以使用Select-Object实现:

    $GroupsData = Get-SPOSite -Limit ALL | ForEach-Object {
        # store this url in a variable first
        $siteUrl = $_.URL
        Write-Host "Processing Site Collection: $siteUrl" -ForegroundColor Yellow
    
        $SiteGroups = Get-SPOSiteGroup -Site $siteUrl
        Write-host "Total Number of Groups Found: $($SiteGroups.Count)"
    
        foreach ($Group in $SiteGroups) {
            $Group | Select-Object @{Name = 'Site URL'; Expression = {$siteUrl}},
                                   @{Name = 'Group Name'; Expression = {$_.Title}},
                                   @{Name = 'Permissions'; Expression = {$_.Roles -join ","}},
                                   @{Name = 'Users'; Expression = {$_.Users -join ","}}
        }
    }
    
    $GroupsData | Export-Csv $CSVPath -NoTypeInformation -Encoding utf8
    

    【讨论】:

    • 你好 Theo,两种方法都按我的意愿工作。非常感谢:-)
    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多