如何在C#中批量更改ACL?

时间:2019-07-01 14:12:38

标签: c# acl

系统要求我编写执行以下操作的应用程序

  • 解析CSV文件并将其拆分为文件系统路径和domain \ user几百行,并将其存储为两个字符串数组
  • 将每个路径的继承的ntfs权限转换为显式权限
  • 更改权限(添加我们的(管理员)用户,删除所有其他用户,添加CEO组+部门负责人(存储在PermissionHolder [k]中的用户,格式为域\用户)

我的问题是,我从未在程序中完成过将NTFS权限从继承更改为显式以及更改ACL的第二部分。 我以IT管理员的身份工作,只偶尔编写代码。 我的代码当前看起来像这样(第一部分,它是一个非常基本的图形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;

如何实现第二部分?

0 个答案:

没有答案