DirectorySecurity.SetOwner作为远程计算机C#上的本地组

时间:2018-09-20 20:00:37

标签: c# ntfs directoryservices

背景

我正在尝试设置远程计算机上文件夹的所有者。使用域帐户时,此方法可以很好地工作,例如,以下操作会将运行脚本的用户设置为远程文件夹的所有者(假设帐户具有这样做的权限):

public static void SetOwner (string path, WindowsIdentity newOwner)
{
    DirectoryInfo di = new DirectoryInfo(path);
    DirectorySecurity ds = di.GetAccessControl();

    NTAccount currentOwner = (NTAccount)ds.GetOwner(typeof(NTAccount));
    WindowsIdentity currentUser = WindowsIdentity.GetCurrent();

    Console.WriteLine("Changing owner on {0} from {1} to {2}", path,
        currentOwner.Value, newOwner.Name);

    ds.SetOwner(newOwner.User);
    di.SetAccessControl(ds);
}

然后

string path = @"\\REMOTE-SERVER\c$\path\to\folder";
WindowsIdentity currentUser = WindowsIdentity.GetCurrent();
SetOwner(path, currentUser);

将当前用户设置为远程计算机上文件夹的所有者。

我的问题是我想将所有者设置为远程计算机上的本地组,尤其是Administrators组。

我可以使用NTAccount adminGroup = new NTAccount(@"REMOTE-SERVER\Administrators");,但这似乎无法检查它是否是真实帐户,而且它不是IdentityReference,因此不能与{{1 }}。我还尝试过使用SetOwner,这使我可以将组查找为DirectoryEntry,但不能设置所有者。

本地计算机和远程计算机位于同一网络上,运行该程序的帐户位于远程计算机的本地管理员组中。一种可以让我查看当前帐户所属的远程计算机上的本地组的解决方案也可以使用,但是我也找不到任何一种方法。我可以在本地计算机上找到组,但是除非程序以管理员身份运行,否则DirectoryEntry组不会出现在本地计算机上。

问题

如何使用C#为远程计算机上的本地组获取Administrators(或IdentityReference)?出于这个问题的考虑,可以假设将Administrators组始终命名为WindowsIdentity,但是计算机名称必须是动态的。

更新

我还没有得到任何反馈,如果有人能指出正确的方向,即使这不是一个完整的答案也很有帮助

0 个答案:

没有答案