Thursday 1 March 2018

To get the Standalone users, Groups, users in Groups, Type, Permission levels, Group ID in site collection and sub sites of site collection

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

#Using Get-SPSite
function global:Get-SPSite($url)
 {
    return new-Object Microsoft.SharePoint.SPSite($url)
 }

function global:Get-SPWeb($url)
{
  $site= New-Object Microsoft.SharePoint.SPSite($url)
        if($site -ne $null)
            {
               $web=$site.OpenWeb();   
            }
    return $web
}

$URL="http://usdttdevbq007/"

     $site = Get-SPSite $URL
 
     #Write the Header to "Tab Separated Text File"
        "Site Name`t  URL `t Group Name `t User Name`t Type `t Permission Levels `t Group ID" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv"
       
     #Iterate through all Webs
      foreach ($web in $site.AllWebs)
      {
        #Write-Host "Site: ":$web -ForegroundColor Red;
        #Write the Header to "Tab Separated Text File"
        "$($web.title) `t $($web.URL) `t  `t  `t `t `t `t `t `t `t `t " | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
       
         $siteUsers = $web.SiteUsers
         $siteUsers.Count

            foreach($WebRoleAssignment in $Web.RoleAssignments )
        {
        $plevel=@()
        $plevel = $WebRoleAssignment.RoleDefinitionBindings
        #Write-Host $plevel.Name
     
          $UserGroupName=$WebRoleAssignment.Member.Name

          if($WebRoleAssignment.Member.GetType() -eq [Microsoft.SharePoint.SPGroup])
            {
                 $Type="Group"
                 $UserName=$WebRoleAssignment.Member.Name
               
                 #Set Flag value for "Group Exists"
             $GroupExistsFlag=$true
            }

             else
            {
            #$Typeis = $WebRoleAssignment.Member.GetType()
            $DirectUser = "User"         
       
            $UserName=$WebRoleAssignment.Member.Name
            #Write-Host "permission levels: ": $RoleDefinition.Name

         
            foreach($roleDefinition in $WebRoleAssignment.RoleDefinitionBindings)
                {
                 
                    "`t  `t  `t  $($UserName) `t $($DirectUser) `t $($plevel.Name) `t" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
                }

             

                 #Is it a Domain Group?
                 if($WebRoleAssignment.Member.IsDomainGroup)
                 {
                   $Type="Domain Group"
                 }
                 else #if($WebRoleAssignment.Member.LoginName) 
                 {
                   $Type="User"
                 }
            }

        }             
                 
     

#Get all Groups and Iterate through 
foreach ($group in $Web.groups)
{
                $Groupidis= $group.ID
         
                $GroupPlevel=@()
                $GroupPlevel= $group.Roles
                #Write-Host $GroupPlevel.Name

                              $GroupNameis ="Group"

"`t  `t $($Group.Name) `t   `t $($GroupNameis) `t $($GroupPlevel) `t $($Groupidis)" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
#Iterate through Each User in the group
   foreach ($user in $group.users)
{
 
                                $Usernameis ="User in Group"
    "`t  `t  `t  $($user.name)`t $($Usernameis) `t `t" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
    #Write-Host "Groups: ":$user -ForegroundColor white;
    #Exclude Built-in User Accounts
        #if(($User.LoginName.ToLower() -ne "nt authority\authenticated users") -and ($User.LoginName.ToLower() -ne "sharepoint\system") -and ($User.LoginName.ToLower() -ne "nt authority\local service"))
        #{
                           
            #}
}
}
 

       }

    #write-host "Report Generated at C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv"
 

Results:

To get the Users, User ID, Title, Department for site collection and sub sites of site collections group users.

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Configuration Parameters
$WebURL="https://devglobal.deloitteresources.com/"
$ReportLocation = "C:\UserAnalysisRpt.csv"

#Get the Web
$Web = Get-SPWeb $WebURL

#Get User information list
$UserInfoList = $Web.SiteUserInfoList

"User Name`t  Department `t Title `t ID" | out-file "C:\UserAnalysisRpt.csv"

 #Get all Groups of the web and Iterate through 
 Foreach ($Group in $Web.Groups)
 {
    #Get Permission Levels Applied to the Group
    $RoleAssignment = $Web.RoleAssignments.GetAssignmentByPrincipal($Group)

    $RoleDefinitionNames=""
    foreach ($RoleDefinition in $RoleAssignment.RoleDefinitionBindings)
    {
        $RoleDefinitionNames+=$RoleDefinition.Name+";"
    }
    #Array to Hold Result - PSObjects
    $ResultCollection = @()

    #"Group Name: $($Group.name) : Permissions: $($RoleDefinitionNames)" >> $ReportLocation
    #Iterate through Each User in the group
        foreach ($User in $Group.users)
        {
            #Get the User details from UIL
            $UserInfo = $UserInfoList.GetItemById($User.ID)         
            $Department = $UserInfo['Department']
            $JobTitle = $UserInfo["JobTitle"]
            $UserIdIs = $UserInfo["ID"]
           
            #Send the output the report file
            $User.name + "`t" + $Department + "`t" + $JobTitle +"`t" + $UserIdIs>> $ReportLocation
        } 
 }
 Write-host "User analysis data has been Exported to $ReportLocation"

Result:


Friday 16 February 2018

Get SharePoint site users and Groups, users in group in site collection

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

#Using Get-SPSite
function global:Get-SPSite($url)
 {
    return new-Object Microsoft.SharePoint.SPSite($url)
 }

function global:Get-SPWeb($url)
{
  $site= New-Object Microsoft.SharePoint.SPSite($url)
        if($site -ne $null)
            {
               $web=$site.OpenWeb();     
            }
    return $web
}

$URL="http://***************/"
 
     $site = Get-SPSite $URL
   
     #Write the Header to "Tab Separated Text File"
        "Site Name`t  URL `t Group Name `t User Name`t Type" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv"
       
     #Iterate through all Webs
      foreach ($web in $site.AllWebs)
      {
        #Write-Host "Site: ":$web -ForegroundColor Red;
        #Write the Header to "Tab Separated Text File"
        "$($web.title) `t $($web.URL) `t  `t  `t `t `t `t " | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
       
         $siteUsers = $web.SiteUsers
         $siteUsers.Count

            foreach($WebRoleAssignment in $Web.RoleAssignments )
        {
          $UserGroupName=$WebRoleAssignment.Member.Name
         

          if($WebRoleAssignment.Member.GetType() -eq [Microsoft.SharePoint.SPGroup])
            {
                 $Type="Group"
                 $UserName=$WebRoleAssignment.Member.Name
               
                 #Set Flag value for "Group Exists"
             $GroupExistsFlag=$true
            }

             else
            {
            #$Typeis = $WebRoleAssignment.Member.GetType()
            $DirectUser = "User"
         
            $UserName=$WebRoleAssignment.Member.Name

                "`t  `t  `t  $($UserName) `t $($DirectUser)" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append

                 #Is it a Domain Group?
                 if($WebRoleAssignment.Member.IsDomainGroup)
                 {
                   $Type="Domain Group"
                 }
                 else #if($WebRoleAssignment.Member.LoginName) 
                 {
                   $Type="User"
                 }
            }

        }             
                   
       

#Get all Groups and Iterate through 
foreach ($group in $Web.groups)
{     
#Write-Host "Groups: ":$group -ForegroundColor green;
                              $GroupNameis ="Group"
"`t  `t $($Group.Name) `t   `t $($GroupNameis)" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
#Iterate through Each User in the group
   foreach ($user in $group.users)
{
                                $Usernameis ="User in Group"
    "`t  `t  `t  $($user.name)`t $($Usernameis)" | out-file "C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv" -append
    #Write-Host "Groups: ":$user -ForegroundColor white;
    #Exclude Built-in User Accounts
        #if(($User.LoginName.ToLower() -ne "nt authority\authenticated users") -and ($User.LoginName.ToLower() -ne "sharepoint\system") -and ($User.LoginName.ToLower() -ne "nt authority\local service"))
        #{
                             
            #}
}
}
   

       }

    #write-host "Report Generated at C:\Users\s-US_SC_SSPDev_Admin\Documents\VenuPscripts\CSVFiles\test5.csv"
   


Thursday 15 February 2018

Get all lists in a SharePoint Web Application using Powershell

Add-PSSnapin Microsoft.SharePoint.PowerShell
  
$SPWebApp = Get-SPWebApplication "http://MySharePointWeb:81/" -ErrorAction SilentlyContinue
# get all the site collections
$SiteCollections = $SPwebApp.Sites
$SiteCollections | ForEach-Object {
# get the all sub sites of site collection
$SubSites = $_.AllWebs
$SubSites | ForEach-Object {
$Site = $_
# get all lists from site
$lists = $Site.Lists | Where-Object { $_.BaseType -eq 'GenericList' }
$lists | ForEach-Object {                
    New-Object -TypeName PSObject -Property @{
              ListName = $_.Title
              SiteName = $Site.Title
              SiteUrl = $Site.Url
}}}}| Export-CSV "C:\\All-Lists.csv" -NoTypeInformation -Encoding UTF8



Get all Document Libraries in a SharePoint web application


Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
 
$SPWebApp = Get-SPWebApplication "http://MySharePointWeb:81/"
# get all the site collections 
$SiteCollections = $SPwebApp.Sites
$SiteCollections | ForEach-Object {
# get the all sub sites of site collection
$SubSites = $_.AllWebs
$SubSites | ForEach-Object {
$Site = $_
 # get all document Libraries from site
$lists = $Site.Lists | Where-Object { $_.BaseType -eq 'DocumentLibrary' }
$lists | ForEach-Object {                                    
    New-Object -TypeName PSObject -Property @{
              LibraryName = $_.Title
              SiteName = $Site.Title
              SiteUrl = $Site.Url
}}}}| Export-CSV "C:\\All-Libraries.csv" -NoTypeInformation -Encoding UTF8