2017-02-14 9 views
0

Я пытаюсь извлечь конкретных пользователей домена, администраторов сайтов и сайтов, из веб-приложения, но столбец администраторов сайта, который появится в виде Microsoft.SharePoint.SPUserCollection. Пожалуйста, помогите мне получить значения этого в CSV.Значения администраторов сайта поступают как 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 

ответ

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

Это не будет работать, так как метод ToString() не преобразует массив в строку, он просто возвращает имя типа.

Вам просто нужно повторить то, что вы делаете для $ UsersColl с массивом $ user.ParentWeb.SiteAdministrators.

У меня нет среды 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 ";").

 Смежные вопросы

  • Нет связанных вопросов^_^