站点管理员值在 CSV 中显示为 Microsoft.SharePoint.SPUserCollection

Site administrators values are coming as Microsoft.SharePoint.SPUserCollection in CSV

我正在尝试从 Web 应用程序中提取特定的域用户、网站和网站集管理员,但网站管理员列显示为 Microsoft.SharePoint.SPUserCollection。请帮助我以 CSV 格式获取它的值。

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue $currentLocation = (Get-Location).Path $outputReport = $currentLocation + "\" + "SharePointUsers2.csv"  $UserDataCollection = @()  $WebAppsColl = Get-SPWebApplication "https://Webapp.com" foreach($WebApp in $WebAppsColl) { Write-host "Scanning Web Application:"$WebApp.Name

$SitesColl = $WebApp.Sites
foreach ($Site in $SitesColl) 
{
    Write-host "Scanning Site Collection:"$Site.URL

    $WebsColl = $Site.AllWebs

        foreach ($web in $WebsColl) 
        {
            Write-host "Scanning Web:"$Web.URL

            $UsersColl = $web.AllUsers 

                foreach ($user in $UsersColl) 
                {
                       if($User.IsDomainGroup -eq $false -and $user -notlike "*XXXXXX*" -and $user -notlike "*global*" -and $user -notlike "*SHAREPOINT*" -and $user -notlike "*AUTHORITY*" -and $user -notlike "*windows*" -and $user -notlike "*312220573*" -and $user -notlike "*true*" -and $user -notlike "*KDS*") 
                        {
                            $UserData = New-Object PSObject

                            $UserData | Add-Member -type NoteProperty -name "UserLogin" -value $user.UserLogin.ToString()
                            $UserData | Add-Member -type NoteProperty -name "DisplayName" -value $user.displayName.ToString()
                            $UserData | Add-Member -type NoteProperty -name "E-mailID" -value $user.Email.ToString()
                            $userData | Add-Member -type NoteProperty -Name "Site" -Value $user.ParentWeb.Url.Tostring()
                            $scusers = $user.ParentWeb.SiteAdministrators
                            $siteadmin = @()


                            $userData | Add-Member -type NoteProperty -Name "SC Admins" -value $user.ParentWeb.SiteAdministrators.ToString()

                            $UserDataCollection += $UserData
                        }
                }
        $Web.dispose()
        }
     $site.dispose()
    }
}    

$UserDataCollection = $UserDataCollection   #|sort-object -Property  {$_.UserLogin } -Unique 


$UserDataCollection | Export-Csv -LiteralPath $OutputReport -NoTypeInformation

Write-host "Total Number of Unique Users found:"$UserDataCollection.Length
$userData | Add-Member -type NoteProperty -Name "SC Admins" -value $user.ParentWeb.SiteAdministrators.ToString()

这行不通,因为 ToString() 方法不会将数组转换为字符串,它只是 returns 类型名称。

您基本上只需要用 $user.ParentWeb.SiteAdministrators 数组重复您对 $UsersColl 所做的操作。

我没有用于测试它的 SharePoint 环境,但像这样的东西应该可以工作

$admins = @()
foreach($admin in $user.ParentWeb.SiteAdministrators){
  $admins += $admin.UserLogin.ToString()
}
$userData | Add-Member -type NoteProperty -Name "SC Admins" -value ($admins -join ";")

请注意,您不想用逗号分隔生成的字符串,否则它会破坏您的 CSV,因此我使用了分号 ($admins -join ";")