Zhaobab
3/2/2015 - 12:52 PM

List all users used inside SharePoint farm, and export them to .csv file.

List all users used inside SharePoint farm, and export them to .csv file.

# ----------------------------------------------
# Author: Romain Blanchard
# Date: 02.03.2015
# Description: List all users used inside SharePoint farm, and export them to .csv file.
# ----------------------------------------------

# Initialize
$null = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

# Initialize log file
$date = Get-Date -Format yyyy-MM-d-HHmmss
$logfile = "RBLA_AllUsers_" + $date + ".txt"
Start-Transcript -Path $logfile -Force | Out-Null

# Initialize csv file
$csv = "RBLA_AllUsers_" + $date + ".csv"
Write-Output "Site Collection URl;User" | Out-File -FilePath $csv -Append

# Script
Write-Host "Exporting users." -NoNewLine
# Get all Web Application in the farm
$Farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
$websvcs = $Farm.Services | where -FilterScript {$_.GetType() -eq [Microsoft.SharePoint.Administration.SPWebService]}
$webapps = @()
foreach ($websvc in $websvcs)
{
    # Process all Web Application
    foreach ($WebApp in $websvc.WebApplications) 
    {
        # Process all Site Collection
        foreach ($SiteCollection in $WebApp.Sites)
        {
        Write-Host "." -NoNewLine   
            # Process all Site Groups
            foreach ($Group in $SiteCollection.RootWeb.SiteGroups)
            {
                # Process all users
                foreach ($User in $Group.Users)
                {
                    Write-Output "$($SiteCollection.Url);$($User.LoginName)" | Out-File -FilePath $csv -Append
                }
            }
        }
    }
}
Write-Host " done!" -ForegroundColor green

# Write log file
Stop-Transcript | Out-Null
$log = Get-Content $logfile
$log > $logfile.Replace('txt','log')
Remove-Item $logfile -Confirm:$false