2017-02-14 2 views
0

Webアプリケーションから特定のドメインユーザー、サイトおよびサイトコレクションの管理者を抽出しようとしていますが、Microsoft.SharePoint.SPUserCollectionというサイト管理者の列があります。 CSVでその価値を知るのを手伝ってください。サイト管理者の値は、CSVのMicrosoft.SharePoint.SPUserCollectionとして表示されます。

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()メソッドは、文字列に配列を変換しないように、それは単にタイプ名を返し、動作しません。

基本的には、$ 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 ";")を使用しました。

関連する問題