Как изменить ACL оптом в C #? - PullRequest
0 голосов
/ 01 июля 2019

Меня просят закодировать приложение, которое выполняет следующие действия:

  • Разобрать файл CSV, разделить его на путь файловой системы и домен \ пользователь на несколько сотен строк и сохранить его в двух строковых массивах
  • Преобразование унаследованных разрешений ntfs в явные для каждого отдельного пути
  • Изменить разрешения (добавить нашего (администратора) пользователя, удалить всех остальных пользователей, добавить группу генеральных директоров + начальник отдела (пользователь, который хранится в PermissionHolder [k] в формате домен \ пользователь)

Моя проблема в том, что я никогда не делал вторую часть с изменением разрешений NTFS с унаследованных на явные и изменением ACL ранее в программе. Я работаю в качестве ИТ-администратора и время от времени пишу только код. Мой код в настоящее время выглядит следующим образом (для первой части он является частью очень простого графического приложения на C #):

 private void Button1_Click(object sender, EventArgs e)
    {
        CSVSpeicherort.ShowDialog();
        string PathToCSV = CSVSpeicherort.FileName;
        txtBox_CSVPath.Text = PathToCSV;
        StreamReader sr = new StreamReader(PathToCSV, Encoding.GetEncoding(1252));

        string[] Lines = new string[TotalLines(PathToCSV)];
        string[] PathsToChangeACLs = new string[TotalLines(PathToCSV)];
        string[] PermissionHolder = new string[TotalLines(PathToCSV)];
        string temp1, temp2 = "";



        for(int j = 0;j<Lines.Length;j++)
        {
            Lines[j] = sr.ReadLine();
        }
        for (int k = 0; k < Lines.Length; k++)
        {

            PathsToChangeACLs[k] = Lines[k].Substring(0, returndelimiterposition(Lines[k]));
            int z = Convert.ToInt32(returndelimiterposition(Lines[k])) + Convert.ToInt32(1);
            PermissionHolder[k] = Lines[k].Substring(z, ((Lines[k].Length-1)-returndelimiterposition(Lines[k])));
        }



    }

    int TotalLines(string filepath)
    {
        using (StreamReader r = new StreamReader(filepath))
        {
            int i = 0;
            while (r.ReadLine() != null) { i++; }
            return i;
        }
    }
    int returndelimiterposition(string Line)
    {
        for (int l = 0; l < Line.Length; l++)
        {
            if (Line[l].Equals(';'))
            {
                return l;
            }
            else
            {
            }
        }
        return 0;

Как мне достичь второй части?

...