Inventory Permissions with Powershell
Here is a script that will inventory all users and permissions by site collection in a sharepoint farm to a csv file and/or a SharePoint list.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#update these variables as needed
$scriptname = "siteusers"
$FilePath = "d:\dashboard\eer-siteusers.csv"
$docliburl= "http://eer/spd/IT/systems/ws/dashboard/Lists/siteusers";
function eer-$scriptname() {
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
foreach ($spService in $farm.Services) {
if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
continue;
}
foreach ($webApp in $spService.WebApplications) {
if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
foreach ($site in $webApp.Sites) {
foreach ($web in $site.AllWebs) {
if (($web.permissions -ne $null) -and ($web.hasuniqueroleassignments -eq "True")) {
foreach ($group in $web.Groups) {
foreach ($user in $group.users) {
$data = @{
"loginname" = $user.loginname
"WebUrl" = $web.url
"GroupPermission" = $group.permission
"UserGroup" = $group
"SiteOwner" = $web.description
"SiteName" = $web.title
}
New-Object PSObject -Property $data
}}
}
}
}
}
$web.Dispose()
}
$site.Dispose()
}
#eer-$scriptname | Out-GridView
eer-$scriptname | Export-Csv -Path $FilePath -NoTypeInformation
$site=new-object Microsoft.SharePoint.SPSite($docliburl);
$web=$site.openweb();
$list=$web.GetList($docliburl);
###delete old items
$collListItems = $List.Items;
$count = $collListItems.Count - 1
for($intIndex = $count; $intIndex -gt -1; $intIndex--)
{
$collListItems.Delete($intIndex);
}
###
$csv_file = Import-Csv $FilePath;
foreach ($line in $csv_file)
{
Write-Output $line.Title;
$item = $list.Items.Add();
$item["Site"] = $line.WebURL;
$item["Member"] = $line.LoginName;
$item["Perms"] = $line.GroupPermission;
$item["Group"] = $line.UserGroup;
$item["Site Owner"] = $line.SiteOwner;
$item["Title"] = $line.SiteName;
$item.Update();
}
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#update these variables as needed
$scriptname = "siteusers"
$FilePath = "d:\dashboard\eer-siteusers.csv"
$docliburl= "http://eer/spd/IT/systems/ws/dashboard/Lists/siteusers";
function eer-$scriptname() {
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
foreach ($spService in $farm.Services) {
if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
continue;
}
foreach ($webApp in $spService.WebApplications) {
if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
foreach ($site in $webApp.Sites) {
foreach ($web in $site.AllWebs) {
if (($web.permissions -ne $null) -and ($web.hasuniqueroleassignments -eq "True")) {
foreach ($user in $web.users) {
$data = @{
"loginname" = $user.loginname
"WebUrl" = $web.url
"GroupPermission" = $user.permission
"SiteOwner" = $web.description
"SiteName" = $web.title
}
New-Object PSObject -Property $data
}
}
}
}
}
$web.Dispose()
}
$site.Dispose()
}
#eer-$scriptname | Out-GridView
eer-$scriptname | Export-Csv -Path $FilePath -NoTypeInformation
$site=new-object Microsoft.SharePoint.SPSite($docliburl);
$web=$site.openweb();
$list=$web.GetList($docliburl);
$csv_file = Import-Csv $FilePath;
foreach ($line in $csv_file)
{
Write-Output $line.Title;
$item = $list.Items.Add();
$item["Site"] = $line.WebURL;
$item["Member"] = $line.LoginName;
$item["Perms"] = $line.GroupPermission;
$item["Site Owner"] = $line.SiteOwner;
$item["Title"] = $line.SiteName;
$item.Update();
}