2010-12-15 2 views
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" 
    } 

답변

2

당신은

System.DirectoryServices.AccountManagement 

사용할 수 있으며 여기에 코드

PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Machine); 

//Create New User 
UserPrincipal oUserPrincipal = new UserPrincipal(oPrincipalContext, "Your UserName", "Your Password", true /*Enabled or not*/); 

oUserPrincipal.UserPrincipalName = "Your UserName"; 
oUserPrincipal.GivenName = "Given Name"; 
oUserPrincipal.Surname = "Surname"; 
oUserPrincipal.Save(); 

//Add User to Group 
GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, "Your Group Name"); 
oGroupPrincipal.Members.Add(oUserPrincipal); 
oGroupPrincipal.Save(); 

가 있음을 실현하려 : 여기

내가 현재 (약간 읽기 쉽도록 변경) 한 코드입니다 전체 구현은 여기로 이동 http://anyrest.wordpress.com/2010/06/28/active-directory-c/

+0

응답 해 주셔서 감사합니다. 이 방법은 저의 ASDI 쿼리보다 훨씬 낫습니다. 불행히도이 방법은 동일한 도메인의 컴퓨터에서는 작동하지만 결합되지 않은 컴퓨터에서는 작동하지 않습니다. oPrincipalContext뿐만 아니라 LogonUser 메서드를 사용하여 자격 증명을 전달하려고했습니다. 어떤 아이디어? – ChrisG

+0

죄송합니다. 답변을 얻지 못했습니다. 도메인 밖에있는 로컬 컴퓨터에서만 사용자를 쿼리한다는 의미입니까? – Raymund

+0

죄송합니다. 내가 뭘 하려는지 명확히하자. 나는이 앱을 사용하여 데스크톱 DESK1 (도메인 XDEV)에서 SERVER1 (도메인 없음)에 관리자를 원격으로 추가하려고한다. 관리자 계정이있는 동일한 도메인의 컴퓨터에 추가 할 수 있습니다. 또한 해당 컴퓨터의 로컬 관리자 인 다른 계정 (예 : TECHADMIN)을 가장 할 수 있습니다. 문제는 도메인 컴퓨터가 아닌 도메인 컴퓨터에 사용자를 추가해야하는 경우입니다. 나는 100 % 확신 할 수는 없다. psexec을 사용할 수는 있지만 AD를 직접 사용하기를 희망합니다. 말이 돼? – ChrisG

관련 문제