This is the method using PnP Online.
Retrieve the additional properties using
Get-PnPProperty
Connect-PnPOnline -Url $siteUrl
$context = Get-PnPContext
For Files
$file = Get-PnPFile -Url $filePath -AsListItem
Get-PnPProperty -ClientObject $file -Property HasUniqueRoleAssignments, RoleAssignments
if($file.HasUniqueRoleAssignments -eq $True)
{
foreach($roleAssignments in $file.RoleAssignments )
{
Get-PnPProperty -ClientObject $roleAssignments -Property RoleDefinitionBindings, Member
$permission.LoginName = $roleAssignments.Member.LoginName
$permission.LoginTitle = $roleAssignments.Member.Title
$permission.PrincipalType = $roleAssignments.Member.PrincipalType.ToString()
$permission.Permission = ""
#Get the Permissions assigned to user
foreach ($RoleDefinition in $roleAssignments.RoleDefinitionBindings)
{
$permission.Permission = $permission.Permission + "," + $RoleDefinition.Name
}
}
}
For folders
$file = Get-PnPFolder -Url $filePath -Includes ListItemAllFields.RoleAssignments, ListItemAllFields.HasUniqueRoleAssignments
$context.Load($file);
$context.ExecuteQuery();
if($file.ListItemAllFields.HasUniqueRoleAssignments -eq $True)
{
foreach($roleAssignments in $file.ListItemAllFields.RoleAssignments)
{
Get-PnPProperty -ClientObject $roleAssignments -Property RoleDefinitionBindings, Member
$permission.LoginName = $roleAssignments.Member.LoginName
$permission.LoginTitle = $roleAssignments.Member.Title
$permission.PrincipalType = $roleAssignments.Member.PrincipalType.ToString()
$permission.Permission = ""
#Get the Permissions assigned to user/group
foreach ($RoleDefinition in $roleAssignments.RoleDefinitionBindings){
$permission.Permission = $permission.Permission + "," + $RoleDefinition.Name
}
}
}