DirectorySecurity.SetOwner как локальная группа на удаленной машине C # - PullRequest
0 голосов
/ 20 сентября 2018

Фон

Я пытаюсь установить владельца папки на удаленном компьютере.Это прекрасно работает при использовании учетной записи домена, например, следующее установит пользователя, выполняющего сценарий, как владельца удаленной папки (при условии, что учетная запись имеет разрешения для этого):

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);

назначит текущего пользователя владельцем папки на удаленном компьютере.

Моя проблема заключается в том, что я хочу установить владельца в качестве локальной группы на удаленном компьютере, в частностигруппа администраторов.

Я могу использовать NTAccount adminGroup = new NTAccount(@"REMOTE-SERVER\Administrators");, но это не значит, что это реальная учетная запись, и, кроме того, это не IdentityReference, поэтому ее нельзя использовать сSetOwner.Я также попытался использовать DirectoryEntry, что позволяет мне найти группу как DirectoryEntry, но не установить владельца.

Локальные и удаленные машины находятся в одной сети, и учетная запись работаетПрограмма находится в группе локальных администраторов на удаленной машине.Решение, которое позволило бы мне видеть локальные группы на удаленном компьютере, членом которого является текущая учетная запись, также будет работать, но я также не смог найти способ сделать это.Я могу получить группы на локальном компьютере, но группа Administrators не появляется там, если программа не запущена с правами администратора.

Вопрос

Как я могу получить IdentityReference (или WindowsIdentity) для локальной группы на удаленном компьютере с использованием C #?Ради этого вопроса справедливо предположить, что группа администраторов всегда будет называться Administrators, но имя машины должно быть динамическим.

Обновление

Я еще не получил ни одного отзываЕсли кто-то может указать мне правильное направление, даже если это не полный ответ, это также будет очень полезно

...