Articles about European Sharepoint Hosting Service
SharePoint 2013 Hosting – HostForLIFE :: Getting Site Users Report Using PnP PowerShell
Recently, I have been tasked with getting the site user’s report in SharePoint sites in our organization Tenant. There are tools and other ways to get it. Here I have used PnP PowerShell version and the concept of PS Custom Object to achieve this task. In this article, we will see how to get the Site Users report using PnP PowerShell and PS Custom Object.
What is PS Custom Object?
This is a new property introduced in PowerShell 3.0 version and above, which helps in creating structured data, and with this data it makes it easier to
- Query the data
- Import and export the data
- Storing the data while working in a session
The details about PSCustomObject is nicely explained by Kevin in his blog and I would highly recommend checking it.
Pre-Requisites
Before proceeding you need to have the following configurations.
- Access to your organization tenant as SharePoint Admin or Global Admin or access to the sites as Site Collection admin where you want to get the site user’s report
- PnP PowerShell module installed. Please investigate the references section on how to install the PowerShell module.
Steps
Please follow the below steps to get the site user’s report.
Step 1
Connect to the SharePoint site
1 |
<span class="token maybe-class-name">Connect</span><span class="token operator">-</span><span class="token maybe-class-name">PnPOnline</span> <span class="token operator">-</span><span class="token maybe-class-name">Url</span> $siteUrl <span class="token operator">-</span><span class="token maybe-class-name">Interactive</span> |
Step 2
Get the Permission Groups in the SharePoint site.
1 |
$GroupNames <span class="token operator">=</span> <span class="token maybe-class-name">Get</span><span class="token operator">-</span><span class="token maybe-class-name">PnPGroup</span> |
Step 3
For each user in Group get the required information and write to object. Here I am only getting Email, PrincipalType, Title, LoginName
1 |
$UserInfo <span class="token operator">=</span> <span class="token maybe-class-name">Get</span><span class="token operator">-</span><span class="token maybe-class-name">PnPGroupMember</span> <span class="token operator">-</span><span class="token maybe-class-name">Identity</span> $groupName <span class="token operator">|</span> select <span class="token maybe-class-name">Email</span><span class="token punctuation">,</span><span class="token maybe-class-name">PrincipalType</span><span class="token punctuation">,</span><span class="token maybe-class-name">Title</span><span class="token punctuation">,</span><span class="token maybe-class-name">LoginName</span> |
If you are interested in getting additional properties you can also add them. By default, it gets the following properties, which can be found by querying a member with select * parameter.
1 2 |
$groupName <span class="token operator">=</span> <span class="token maybe-class-name">Get</span><span class="token operator">-</span><span class="token maybe-class-name">PnPGroup</span> <span class="token operator">-</span><span class="token maybe-class-name">AssociatedOwnerGroup</span> $UserInfo <span class="token operator">=</span> <span class="token maybe-class-name">Get</span><span class="token operator">-</span><span class="token maybe-class-name">PnPGroupMember</span> <span class="token operator">-</span><span class="token maybe-class-name">Identity</span> $groupName <span class="token operator">|</span> select <span class="token operator">*</span> |
Step 4
Export the object data into CSV.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token maybe-class-name">Step</span> <span class="token number">4</span><span class="token operator">:</span> <span class="token maybe-class-name">Export</span> the object data into <span class="token constant">CSV</span><span class="token punctuation">.</span> <span class="token property-access">$UserInfo</span> <span class="token operator">|</span> <span class="token maybe-class-name">ForEach</span><span class="token operator">-</span><span class="token known-class-name class-name">Object</span><span class="token punctuation">{</span> $MemberEntity <span class="token operator">=</span> <span class="token punctuation">[</span>pscustomobject<span class="token punctuation">]</span>@<span class="token punctuation">{</span> <span class="token string">'Email'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Email</span></span> <span class="token string">'PrincipalType'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">PrincipalType</span></span> <span class="token string">'Title'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Title</span></span> <span class="token string">'SiteUrl'</span> <span class="token operator">=</span> $siteUrl <span class="token string">'SiteName'</span> <span class="token operator">=</span>$siteTitle <span class="token string">'GroupName'</span> <span class="token operator">=</span> $groupName<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Title</span></span> <span class="token string">'LoginName'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">LoginName</span></span> <span class="token punctuation">}</span> $MemberEntity <span class="token operator">|</span> <span class="token maybe-class-name">Export</span><span class="token operator">-</span><span class="token maybe-class-name">Csv</span> <span class="token operator">-</span><span class="token maybe-class-name">Path</span> $OutputFile <span class="token operator">-</span><span class="token maybe-class-name">Append</span> <span class="token operator">-</span><span class="token maybe-class-name">NoTypeInformation</span> <span class="token operator">-</span><span class="token maybe-class-name">Force</span> |
Validation
Below is the input format of the CSV file.
Below is the output CSV after the script run completes.
Below is the complete script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#<span class="token maybe-class-name">Step1</span><span class="token operator">:</span> <span class="token maybe-class-name">Load</span> the <span class="token maybe-class-name">Site</span> <span class="token maybe-class-name">URLs</span> into a collection #<span class="token maybe-class-name">Step2</span><span class="token operator">:</span> <span class="token maybe-class-name">For</span> each site url <span class="token keyword keyword-get">get</span> associated membersgroup and members #<span class="token maybe-class-name">Pending</span> to <span class="token keyword keyword-get">get</span> the members <span class="token keyword module keyword-from">from</span> <span class="token maybe-class-name">OWners</span> and <span class="token maybe-class-name">Visitors</span> #<span class="token maybe-class-name">Declaring</span> variables $CurrentTime <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token maybe-class-name">Get</span> <span class="token operator">-</span> <span class="token known-class-name class-name">Date</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access"><span class="token maybe-class-name">ToString</span></span><span class="token punctuation">(</span><span class="token string">"yymmddhhmmss"</span><span class="token punctuation">)</span> $OutputFile <span class="token operator">=</span> <span class="token string">"C:\Temp\OutPuts\SiteMembersInfo-"</span> <span class="token operator">+</span> $CurrentTime <span class="token operator">+</span> <span class="token string">".csv"</span> #<span class="token maybe-class-name">Add</span> <span class="token operator">-</span> <span class="token maybe-class-name">Content</span> <span class="token operator">-</span> <span class="token maybe-class-name">Path</span> $OutputFile <span class="token operator">-</span> <span class="token maybe-class-name">Value</span> <span class="token string">"Email, SiteUrl, SiteName, IsEmailAuthenticationGuestUser, IsShareByEmailGuestUser, Title, PrincipalType"</span> $SiteUrlColl <span class="token operator">=</span> <span class="token maybe-class-name">Import</span> <span class="token operator">-</span> <span class="token maybe-class-name">Csv</span> <span class="token operator">-</span> <span class="token maybe-class-name">Path</span> <span class="token string">"C:Temp\Inputs\SiteURLCollection.csv"</span> #$SiteUrlColl <span class="token operator">=</span> <span class="token maybe-class-name">Get</span> <span class="token operator">-</span> <span class="token maybe-class-name">PnPTenantSite</span> <span class="token operator">|</span> <span class="token maybe-class-name">Select</span> <span class="token constant">URL</span> <span class="token keyword control-flow keyword-try">try</span> <span class="token punctuation">{</span> <span class="token function">foreach</span><span class="token punctuation">(</span><span class="token parameter">$siteUrl <span class="token keyword keyword-in">in</span> $SiteUrlColl<span class="token punctuation">.</span><span class="token constant">URL</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token maybe-class-name">Write</span> <span class="token operator">-</span> <span class="token maybe-class-name">Host</span> <span class="token string">"Getting members for $siteUrl"</span> <span class="token operator">-</span> <span class="token maybe-class-name">ForegroundColor</span> <span class="token maybe-class-name">Yellow</span> <span class="token maybe-class-name">Connect</span> <span class="token operator">-</span> <span class="token maybe-class-name">PnPOnline</span> <span class="token operator">-</span> <span class="token maybe-class-name">Url</span> $siteUrl <span class="token operator">-</span> <span class="token maybe-class-name">Interactive</span> $siteTitle <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token maybe-class-name">Get</span> <span class="token operator">-</span> <span class="token maybe-class-name">PnpWeb</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Title</span></span> $GroupNames <span class="token operator">=</span> <span class="token maybe-class-name">Get</span> <span class="token operator">-</span> <span class="token maybe-class-name">PnPGroup</span> <span class="token function">foreach</span><span class="token punctuation">(</span><span class="token parameter">$groupName <span class="token keyword keyword-in">in</span> $GroupNames</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> $UserInfo <span class="token operator">=</span> <span class="token maybe-class-name">Get</span> <span class="token operator">-</span> <span class="token maybe-class-name">PnPGroupMember</span> <span class="token operator">-</span> <span class="token maybe-class-name">Identity</span> $groupName <span class="token operator">|</span> select <span class="token maybe-class-name">Email</span><span class="token punctuation">,</span> <span class="token maybe-class-name">PrincipalType</span><span class="token punctuation">,</span> <span class="token maybe-class-name">Title</span><span class="token punctuation">,</span> <span class="token maybe-class-name">LoginName</span> $UserInfo <span class="token operator">|</span> <span class="token maybe-class-name">ForEach</span> <span class="token operator">-</span> <span class="token known-class-name class-name">Object</span> <span class="token punctuation">{</span> $MemberEntity <span class="token operator">=</span> <span class="token punctuation">[</span>pscustomobject<span class="token punctuation">]</span> @ <span class="token punctuation">{</span> <span class="token string">'Email'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Email</span></span> <span class="token string">'PrincipalType'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">PrincipalType</span></span> <span class="token string">'Title'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Title</span></span> <span class="token string">'SiteUrl'</span> <span class="token operator">=</span> $siteUrl <span class="token string">'SiteName'</span> <span class="token operator">=</span> $siteTitle <span class="token string">'GroupName'</span> <span class="token operator">=</span> $groupName<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">Title</span></span> <span class="token string">'LoginName'</span> <span class="token operator">=</span> $_<span class="token punctuation">.</span><span class="token property-access"><span class="token maybe-class-name">LoginName</span></span> <span class="token punctuation">}</span> $MemberEntity <span class="token operator">|</span> <span class="token maybe-class-name">Export</span> <span class="token operator">-</span> <span class="token maybe-class-name">Csv</span> <span class="token operator">-</span> <span class="token maybe-class-name">Path</span> $OutputFile <span class="token operator">-</span> <span class="token maybe-class-name">Append</span> <span class="token operator">-</span> <span class="token maybe-class-name">NoTypeInformation</span> <span class="token operator">-</span> <span class="token maybe-class-name">Force</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword control-flow keyword-catch">catch</span> <span class="token punctuation">{</span> <span class="token maybe-class-name">Write</span> <span class="token operator">-</span> <span class="token maybe-class-name">Host</span> <span class="token string">"Error: $($_.Exception.Message)"</span> <span class="token operator">-</span> <span class="token maybe-class-name">ForegroundColor</span> <span class="token maybe-class-name">Red</span> <span class="token punctuation">}</span> <span class="token maybe-class-name">Disconnect</span> <span class="token operator">-</span> <span class="token maybe-class-name">PnPOnline</span> |
Print article | This entry was posted by Peter on February 23, 2023 at 2:52 am, and is filed under Other Related Post. Follow any responses to this post through RSS 2.0. Both comments and pings are currently closed. |