0
도메인이 아닌 컴퓨터에 로컬 사용자 계정을 추가하려고합니다. 나는 내가 생각할 수있는 모든 것에 관해서 노력했다. 동일한 도메인의 컴퓨터에서는 작동하지만 도메인 외의 컴퓨터에서는 작동하지 않습니다. 이 서버에 ping 및 TS를 보낼 수 있지만 관리자를 추가 할 수 없습니다.
이렇게하려면 DirectoryEntry를 사용할 수 있습니까?C# ActiveDirectory - 도메인에 가입되어있는 컴퓨터에서 도메인이 아닌 컴퓨터에 로컬 사용자 계정을 원격으로 추가하는 방법
private string AddLocalAdmin_NonDomain(string ComputerName)
{
StartImpersonation(); //Uses advapi32.dll->LogonUser()
string ErrMsg = "";
const int ADS_UF_DONT_EXPIRE_PASSWD = 0x10000;
DirectoryEntry AD = new DirectoryEntry("WinNT://" + ComputerName + ",computer", ComputerName + "\\" + UserCredentials.Username, UserCredentials.Password);
object n = AD.NativeObject;
DirectoryEntry NewUser = AD.Children.Add(Username, "user");
NewUser.Invoke("SetPassword", new object[] { Password });
if (!PasswordExpires)
{
int val = ADS_UF_DONT_EXPIRE_PASSWD;
NewUser.InvokeSet("userFlags", new object[] { val });
}
NewUser.CommitChanges();
DirectoryEntry grp;
grp = AD.Children.Find("Administrators", "group");
if (grp != null) { grp.Invoke("Add", new object[] { NewUser.Path.ToString() }); }
EndImpersonation(); //Ends the impersonation
return ErrMsg; //returns "Access Denied"
}
응답 해 주셔서 감사합니다. 이 방법은 저의 ASDI 쿼리보다 훨씬 낫습니다. 불행히도이 방법은 동일한 도메인의 컴퓨터에서는 작동하지만 결합되지 않은 컴퓨터에서는 작동하지 않습니다. oPrincipalContext뿐만 아니라 LogonUser 메서드를 사용하여 자격 증명을 전달하려고했습니다. 어떤 아이디어? – ChrisG
죄송합니다. 답변을 얻지 못했습니다. 도메인 밖에있는 로컬 컴퓨터에서만 사용자를 쿼리한다는 의미입니까? – Raymund
죄송합니다. 내가 뭘 하려는지 명확히하자. 나는이 앱을 사용하여 데스크톱 DESK1 (도메인 XDEV)에서 SERVER1 (도메인 없음)에 관리자를 원격으로 추가하려고한다. 관리자 계정이있는 동일한 도메인의 컴퓨터에 추가 할 수 있습니다. 또한 해당 컴퓨터의 로컬 관리자 인 다른 계정 (예 : TECHADMIN)을 가장 할 수 있습니다. 문제는 도메인 컴퓨터가 아닌 도메인 컴퓨터에 사용자를 추가해야하는 경우입니다. 나는 100 % 확신 할 수는 없다. psexec을 사용할 수는 있지만 AD를 직접 사용하기를 희망합니다. 말이 돼? – ChrisG