here is the script. Haven't tested. You can add sub-sites too in another foreach.
string WebUrl = "https://company.sharepoint.com/sites/web";
string UserLoginName = " i:0#.f|membership|name.surname_domain.com#EXT#@microsoft.com";
public static void RemoveUserPermissions(string SiteUrl, string UserLoginName)
{
using (var ctx = new ClientContext(SiteUrl))
{
var Web = ctx.Web;
var Lists = Web.Lists;
ctx.Load(ctx.Web);
ctx.Load(Lists);
ctx.ExecuteQuery();
Console.WriteLine(string.Format("Removing user {0} from Site: {1}", UserLoginName, SiteUrl));
var User = Web.SiteUsers.GetByLoginName(UserLoginName);
Web.RoleAssignments.GetByPrincipal(User).DeleteObject();
ctx.ExecuteQuery();
foreach (var List in Lists)
{
var UniqueListPerm = List.HasUniqueRoleAssignments;
ctx.Load(UniqueListPerm);
ctx.ExecuteQuery();
if(UniqueListPerm)
{
Console.WriteLine(string.Format("Removing user from List or Library: {0}", UserLoginName, List.Title));
List.RoleAssignments.GetByPrincipal(User).DeleteObject();
ctx.ExecuteQuery();
}
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy></Query></View>";
var Items = list.GetItems(camlQuery);
ctx.Load(Items);
ctx.ExecuteQuery();
foreach (var Item in Items)
{
var UniqueItemPerm = Item.HasUniqueRoleAssignments;
ctx.Load(UniqueItemPerm);
ctx.ExecuteQuery();
if (UniqueItemPerm)
{
Console.WriteLine(string.Format("Removing user from Library {0} and Item: {1}", List.Title, Item.Id));
Item.RoleAssignments.GetByPrincipal(User).DeleteObject();
ctx.ExecuteQuery();
}
}
}
}
}