This give a list of users through both active directory and SharePoint direct permissions. This is unfinished and needs a bunch of improvements. It does not iterate through the SharePoint groups
Add-PSSnapin Microsoft.SharePoint.PowerShell
$WebUrl = 'http://portal.opwftg.com/sites/OPWSS/Teams/Acq'
$Web = Get-SPWeb $WebUrl
$ListName = 'Industry Intelligence'
$List = $web.Lists[$ListName]
$siteCollUsers = $web.SiteUsers
#$siteCollUsers = $list.user
$users = $list.permissions.member.users
foreach($user in $users)
{
# $user.IsDomainGroup
#$domain = $ADGroupName.substring(0, $user.IndexOf("\") + 1)
$groupName = 'OPWFTG SP OTP ACQ Intelligence Contributors' #$ADGroupName.Remove(0, $user.IndexOf("\") + 1)
if($user.IsDomainGroup -eq $true)
{
#$user.DisplayName
if($user.DisplayName.Contains('OPWFTG'))
{
#$user
$strFilter = "(&(objectCategory=Group)(name="+($groupName)+"))"
#"Removed: "
#$adName = $user.DisplayName.Replace("OPWFTG\","")
#$adName
#$strFilter = "(&(objectCategory=Group)(name="+($adName)+"))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = $strFilter
$colProplist = ("name","member","objectclass")
foreach ($i in $colPropList)
{
$catcher = $objSearcher.PropertiesToLoad.Add($i)
}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
{
if($objResult.Properties["Member"] -ne $null)
{
foreach ($member in $objResult.Properties["Member"])
{
$indMember = [adsi] "LDAP://$member"# $member
$indMember.Name | Out-File -Filepath "E:\temp\users.txt" -Append
}
}
}##ends for each colresults
}##end the if display name
}
else
{
$user.DisplayName | Out-File -Filepath "E:\temp\users.txt" -Append
}
}
$web.dispose()