-
Notifications
You must be signed in to change notification settings - Fork 0
/
Get-SPOUserPermissions.ps1
74 lines (60 loc) · 1.94 KB
/
Get-SPOUserPermissions.ps1
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
param (
[Parameter(Mandatory=$true)]
[string]$SiteUrl,
[Parameter(Mandatory=$true)]
[string]$UserEmail,
[Parameter(Mandatory=$true)]
[string]$OutputCSVFile
)
function Connect-SPO {
param (
[Parameter(Mandatory=$true)]
[string]$SiteUrl
)
try {
$credential = Get-Credential
Connect-SPOService -Url $SiteUrl -Credential $credential
} catch {
Write-Error "Failed to connect to SharePoint Online. Please ensure your credentials are correct and try again."
exit 1
}
}
function Get-UserPermissions {
param (
[Parameter(Mandatory=$true)]
[string]$UserEmail
)
try {
$web = Get-SPOSite -Identity $SiteUrl -Detailed
$user = Get-SPOUser -Site $SiteUrl -LoginName $UserEmail
$permissionLevels = @()
foreach ($roleAssignment in $web.RoleAssignments) {
if ($roleAssignment.Member.LoginName -eq $user.LoginName) {
$permissionLevels += $roleAssignment.RoleDefinitionBindings.Title
}
}
return $permissionLevels
} catch {
Write-Error "Failed to retrieve user permissions. Please ensure the user email and site URL are correct."
exit 1
}
}
function Export-PermissionsToCSV {
param (
[Parameter(Mandatory=$true)]
[Array]$Permissions,
[Parameter(Mandatory=$true)]
[string]$OutputCSVFile
)
try {
$permissionsTable = $Permissions | Select-Object @{Name='Permission'; Expression={$_}}
$permissionsTable | Export-Csv -Path $OutputCSVFile -NoTypeInformation
Write-Host "Permissions exported to $OutputCSVFile" -ForegroundColor Green
} catch {
Write-Error "Failed to export permissions to CSV file."
exit 1
}
}
Connect-SPO -SiteUrl $SiteUrl
$permissions = Get-UserPermissions -UserEmail $UserEmail
Export-PermissionsToCSV -Permissions $permissions -OutputCSVFile $OutputCSVFile