сопоставление / миграция пользователей sharepoint - PullRequest
1 голос
/ 06 марта 2019

В настоящее время я работаю над миграцией sharepoint в тестовой среде, и теперь я подошел к тому моменту, когда я хотел бы сопоставить / перенести мои существующие группы объявлений и пользователей с SP 2010 на SP 2013. Теперь, исследуя это, я нахожумного смутной информации, но ничего очень серьезного в этом вопросе.Как мне лучше поступить по этому поводу?

Допустим, у меня есть следующие пользователи в CSV-файле, представляющие пользователей в среде SP 2010:

c: 0! .S | windows
i: 0 # .w | домен здесь \ администратор i: 0 # .w | домен здесь \ apservice
i: 0 # .w | домен здесь \ koen
NT AUTHORITY \ ЛОКАЛЬНЫЙ СЕРВИС
SHAREPOINT \ system
Домен здесь \ 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

}

Или они - лучшие способы сделать этот тип материи?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Процесс, которому вы будете следовать:

$ user = Get-SPUser -Identity "DOM \ john.smith" -Web https://siteCollectionUrl

Move-SPUser -Identity $ user -NewAlias ​​"i: 0 # .w | IDD \ 142909" -IgnoreSid

Это перенесет пользователя на всю ферму. Вам не нужно вызывать EnsureUser.

Если вы используете приложение службы профилей пользователей, убедитесь, что ваша учетная запись пользователя имеет полный контроль над UPSA для миграции пользователей. Я также предоставил приведенный выше пример при использовании аутентификации Windows Claims. В Get-SPUser вам не нужно указывать его, но в Move-SPUser вы делаете.

https://social.technet.microsoft.com/Forums/en-US/2703f6de-7a79-46b8-9184-01279a845c4b/migrating-all-users-to-a-new-domain?forum=sharepointadmin

0 голосов
/ 06 марта 2019

У меня есть код, который работает в C # с использованием CSOM.Он считывает разрешения из всех списков (библиотеки документов также являются списками) и уровень сайта и записывает их в 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 });
            }
        }
    }
}

Запись разрешенийв Excel с помощью EPPlus

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:\path\Permissions.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");
        }
    }
}
...