映射/迁移SharePoint用户



我目前正在测试环境上进行SharePoint迁移,现在我想映射/迁移我的现有广告组,从SP 2010到SP2013年。现在,在研究此问题时,我发现了很多模糊的信息,但对此问题没有什么扎实的。我怎么会最好地解决这个问题。

假设我在代表SP 2010环境中用户的CSV文件中有关注用户:

c:0!.s | Windows
i:0#.w | domainhere 管理员 i:0#.w | domainhere apservice
i:0#.w | domainhere koen
nt当局本地服务
SharePoint System
domainhere apservice

我应该写一个类似于以下的powershell脚本的脚本

$csv = Import-CSV ".sites-default.csv"
$web = Get-SPWeb = "https://mymachine.mydomain"
foreach($row in $csv)
{
#You could do this to format your account name if not already in the csv
$username = "Domain" + $row.key
$web.EnsureUser($username)
$group = $web.SiteGroups |?{$_.name -eq "GROUPNAME"}
Set-SPUser -identity $username -web $web.url -group $group
}

或者他们是更好地做此类问题的方法?

我有一些使用CSOM在C#中起作用的代码。它读取所有列表中的权限(文档库也是列表)和网站级别,并将其写入Excel。

然后,它读取Excel的权限并将其放在新的SharePoint上。

Excel使用using OfficeOpenXml;

模型

public class PermissionsToExcel
{
    public string ListTitle { get; set; }
    public string Gebruikersnaam { get; set; }
    public string Rechten { get; set; }
    public string ListUrl { get; set; }
    public bool HasUniqueRoleAssignments { get; set; }
}

从每个列表中获取组及其权限的代码:

List<PermissionsToExcel> permissionsToExcelList = new List<PermissionsToExcel>();
using (ClientContext ctx = new ClientContext(@"http://yoursharepointurl.com/"))
{
    Web web = ctx.Web;
    ctx.Load(web, w => w.HasUniqueRoleAssignments, w => w.Url);
    ctx.Load(web.RoleAssignments);
    ctx.Load(web.Lists);
    ctx.Load(web.Lists, lists => lists.Include(list => list.Title, list => list.DefaultViewUrl, list => list.RoleAssignments, list => list.RoleAssignments.Groups, list => list.HasUniqueRoleAssignments));
    ctx.ExecuteQuery();
    //Get permissions on site level
    foreach (RoleAssignment webRA in web.RoleAssignments)
    {
        ctx.Load(webRA.Member);
        ctx.Load(webRA.RoleDefinitionBindings);
        ctx.ExecuteQuery();
        foreach (RoleDefinition definition in webRA.RoleDefinitionBindings)
        {
            ctx.Load(definition);
            ctx.ExecuteQuery();
            permissionsToExcelList.Add(new PermissionsToExcel() { ListTitle = "", Gebruikersnaam = webRA.Member.LoginName, Rechten = definition.Name, ListUrl = web.Url, HasUniqueRoleAssignments = web.HasUniqueRoleAssignments });
        }
    }
    //Write down each group per list and their permissions
    foreach (List list in web.Lists)
    {
        string listUrl = list.Context.Url + list.GetWebRelativeUrl();
        foreach (RoleAssignment listRA in list.RoleAssignments)
        {
            ctx.Load(listRA.Member);
            ctx.Load(listRA.RoleDefinitionBindings);
            ctx.ExecuteQuery();
            foreach (RoleDefinition definition in listRA.RoleDefinitionBindings)
            {
                ctx.Load(definition);
                ctx.ExecuteQuery();
                permissionsToExcelList.Add(new PermissionsToExcel() { ListTitle = list.Title, Gebruikersnaam = listRA.Member.LoginName, Rechten = definition.Name, ListUrl = listUrl, HasUniqueRoleAssignments = list.HasUniqueRoleAssignments });
            }
        }
    }
}

使用epplus

将权限写入excel
ExcelPackage excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("Permissions");
workSheet.Cells[1, 1].LoadFromCollection(permissionsList, true);
using (var memoryStream = new MemoryStream())
{
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("content-disposition", "attachment;  filename=Permissions.xlsx");
    excel.SaveAs(memoryStream);
    memoryStream.WriteTo(Response.OutputStream);
    Response.Flush();
    Response.End();
 }

阅读Excel的权限

List<PermissionsToExcel> permissionslist = new List<PermissionsToExcel>();
FileInfo existingFile = new FileInfo(@"C:pathPermissions.xlsx");
using (ExcelPackage package = new ExcelPackage(existingFile))
{
    //Get the first worksheet in the workbook
    ExcelWorksheet excelWorksheet = package.Workbook.Worksheets["Permissions"];
    int colCount = excelWorksheet.Dimension.End.Column;  //get Column Count
    int rowCount = excelWorksheet.Dimension.End.Row;     //get row count
    for (int row = 2; row <= rowCount; row++)//Rij 1 is de titel rij, beginnen bij rij 2
    {
        PermissionsToExcel permission = new PermissionsToExcel
        {
            ListTitle = excelWorksheet.Cells[row, 1].Value.ToString().Trim(),
            Gebruikersnaam = excelWorksheet.Cells[row, 2].Value.ToString().Trim(),
            Rechten = excelWorksheet.Cells[row, 3].Value.ToString().Trim(),
            ListUrl = excelWorksheet.Cells[row, 4].Value.ToString().Trim(),
            HasUniqueRoleAssignments = excelWorksheet.Cells[row, 5].Value.ToString().Trim().ToBoolean()
        };
        permissionslist.Add(permission);
    }
    return permissionslist;
}

将权限放在新站点上(具有与旧网站相同的库设置!

using (ClientContext ctx = new ClientContext(@"http://newSharePointSiteUrl.com/"))
{
    Web web = ctx.Web;
    ctx.Load(web.Lists);
    ctx.Load(web.RoleDefinitions);
    ctx.ExecuteQuery();
    //Ophalen rollen
    RoleDefinition roleTypeOwner = ctx.Web.RoleDefinitions.GetByType(RoleType.Administrator);
    RoleDefinition roleTypeEditor = ctx.Web.RoleDefinitions.GetByType(RoleType.Editor);
    RoleDefinition roleTypeVisitor = ctx.Web.RoleDefinitions.GetByType(RoleType.Reader);
    //RoleDefinition roleTypeNone = ctx.Web.RoleDefinitions.GetByType(RoleType.None);//Werkt niet
    ctx.ExecuteQuery();
    //Get groups
    ctx.Load(ctx.Web.SiteGroups);
    ctx.Load(ctx.Web.SiteUsers);
    ctx.ExecuteQuery();
    foreach (PermissionsToExcel pte in permissionslist)
    {
        if (pte.ListTitle == "")//If listtitle is empty, it's the site permissions
        {
            //Get site
            User user = ctx.Web.SiteUsers.GetByLoginName(pte.Gebruikersnaam);
            ctx.Load(user);
            ctx.ExecuteQuery();
            //Check if the site had unique permissions
            if (pte.HasUniqueRoleAssignments)//Site had unique permissions, break inheritance and take away the old groups
            {
                RoleDefinitionBindingCollection rdbc = new RoleDefinitionBindingCollection(ctx);
                switch (pte.Rechten)
                {
                    case "Read":
                        rdbc.Add(roleTypeVisitor);
                        break;
                    case "Edit":
                        rdbc.Add(roleTypeEditor);
                        break;
                    case "Full Control":
                        rdbc.Add(roleTypeOwner);
                        break;
                    default:
                        break;
                }
                web.BreakRoleInheritance(false, true);
                web.RoleAssignments.Add(user, rdbc);
            }
            else//Site had no unique permissions, inherit from above
            {
                //TODO: do we want that?
            }
        }
        else if (web.ListExists(pte.ListTitle))//Go over all lists
        {
            //Get List
            List list = web.Lists.First(t => t.Title == pte.ListTitle);
            //var group = ctx.Web.SiteGroups.GetByName(pte.Gebruikersnaam);
            //ctx.Load(Group);
            //ctx.ExecuteQuery();
            User user = ctx.Web.SiteUsers.GetByLoginName(pte.Gebruikersnaam);
            ctx.Load(user);
            ctx.ExecuteQuery();
            //Check if list had unique permissions
            if (pte.HasUniqueRoleAssignments)//List had unique permissions, stop inheritance and put back groups with their permissions
            {
                RoleDefinitionBindingCollection rdbc = new RoleDefinitionBindingCollection(ctx);
                switch (pte.Rechten)
                {
                    case "Read":
                        rdbc.Add(roleTypeVisitor);
                        break;
                    case "Edit":
                        rdbc.Add(roleTypeEditor);
                        break;
                    case "Full Control":
                        rdbc.Add(roleTypeOwner);
                        break;
                    default:
                        break;
                }
                list.BreakRoleInheritance(false, true);
                //list.RoleAssignments.Add(Group, rdbc);
                list.RoleAssignments.Add(user, rdbc);
            }
            else //List had no unique permissions, inherit from above
            {
                list.ResetRoleInheritance();
            }
        }
        else
        {
            Debug.WriteLine("LIST NOT FOUND: PROBLEM");
        }
    }
}

您要遵循的过程是:

$ user = get -spuser -Identity" dom john.smith" -web https://sitecollectionurl

Move -spuser -Identity $ user -newalias" i:0#.w | idd 142909" -ignoresid

这将在农场范围内迁移用户。您不需要致电Suseuser。

如果您使用的是用户配置文件服务应用程序,请确保您的用户帐户对UPSA具有明确的完全控制,以迁移用户。如果使用Windows索赔验证,我还提供了上面的示例。在get-puser上,您不必指定它,但是在移动式调音器上,您会这样做。

https://social.technet.microsoft.com/forums/en-us/2703f6de-7a79-79-46b8-9184-01279a845c4b/p>

相关内容

  • 没有找到相关文章

最新更新