AD Benutzer erstellen, aber mit einem anderen UserAccount statt dem Angemeldeten (!?)

04/09/2007 - 11:20 von Volkan Senguel | Report spam
Hallo zusammen, ich habe hier eine Methode um einen AD User zu erstellen
welche auch funktioniert, nur habe die Benutzer wo das ganze nutzen sollen
haben keine Rechte im AD um Benutzer zu erstellen (Human Resources!!!), wie
kann ich im Code einen User mitgeben wo die Rechte besitzt und die User
trotzdem angelegt werden können?

-
public static string CreateUser(string FirstName, string LastName, string
FullName, string LogonName, string ProfilePath, string Password, string
LogonScript, string PersonalNummer)
{
try
{
DirectoryEntry ent = new DirectoryEntry();
DirectoryEntry ou = ent.Children.Find("OU=Abteilung_FC,OU=Stamm");
DirectoryEntry user = ou.Children.Add("CN=" + FullName + "", "user");
//ADS Properties
user.Properties["givenname"].Value = FirstName;
user.Properties["sn"].Value = LastName;
user.Properties["displayname"].Value = FullName;
user.Properties["userPrincipalName"].Value = LogonName + "@" +
Properties.Settings.Default.Domain;
user.Properties["samAccountName"].Value = LogonName;

if (!string.IsNullOrEmpty(LogonScript))
{
user.Properties["scriptPath"].Value = LogonScript;
}

if (!string.IsNullOrEmpty(ProfilePath))
{
user.Properties["profilePath"].Value = ProfilePath;
}
user.CommitChanges();

//Set ADS Password Properties
user.Invoke("SetPassword", new object[] { Password });
user.Properties["userAccountControl"].Value = 0x200;
user.Properties["pwdLastSet"].Value = 0;
user.CommitChanges();
user.Close();

return ("Benutzerkonto für " + FullName + " wurde erfolgreich
erstellt.");
}

catch (Exception ex)
{
return (ex.Message);
}
}
-



Danke für jeden Tip
Volkan von Klass
 

Lesen sie die antworten

#1 Grumbach, Andre
04/09/2007 - 11:42 | Warnen spam
Hallo Volkan,
ich hatte vor geraumer Zeit einmal ein àhnliches Problem.

Ich habe es wie folgt gelöst:

System.Security.Principal.WindowsImpersonationContext newUser =
ImpersonateUser(ADMINUSER, DOMAIN, PASSWORD); // Context eines anderen
Benutzers ziehen
// Aktion die durchgeführt werden soll
newUser.Undo(); // Meldet diesen Benutzer wieder ab.

public static WindowsImpersonationContext ImpersonateUser(string sUsername,
string sDomain, string sPassword)
{
IntPtr pExistingTokenHandle = new IntPtr(0);
IntPtr pDuplicateTokenHandle = new IntPtr(0);
pExistingTokenHandle = IntPtr.Zero;
pDuplicateTokenHandle = IntPtr.Zero;


if (sDomain == "")
sDomain = System.Environment.MachineName;

try
{
string sResult = null;

const int LOGON32_PROVIDER_DEFAULT = 0;

const int LOGON32_LOGON_INTERACTIVE = 2;

bool bImpersonated = LogonUser(sUsername, sDomain, sPassword,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref
pExistingTokenHandle);

if (!bImpersonated)
{
int nErrorCode = Marshal.GetLastWin32Error();
sResult = "LogonUser() failed with error code: " + nErrorCode + "";
}

sResult += "Before impersonation: " + WindowsIdentity.GetCurrent().Name
+ "";

bool bRetVal = DuplicateToken(pExistingTokenHandle,
(int)SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, ref
pDuplicateTokenHandle);

if (false == bRetVal)
{
int nErrorCode = Marshal.GetLastWin32Error();
CloseHandle(pExistingTokenHandle); // close existing handle
sResult += "DuplicateToken() failed with error code: " + nErrorCode +
"";

return null;
}
else
{
WindowsIdentity newId = new WindowsIdentity(pDuplicateTokenHandle);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();
sResult += "After impersonation: " + WindowsIdentity.GetCurrent().Name
+ "";

return impersonatedUser;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (pExistingTokenHandle != IntPtr.Zero)
CloseHandle(pExistingTokenHandle);
if (pDuplicateTokenHandle != IntPtr.Zero)
CloseHandle(pDuplicateTokenHandle);
}
}

Hoffe das hilft dir etwas weiter.

Andre
"Volkan Senguel" schrieb im Newsbeitrag
news:%
Hallo zusammen, ich habe hier eine Methode um einen AD User zu erstellen
welche auch funktioniert, nur habe die Benutzer wo das ganze nutzen sollen
haben keine Rechte im AD um Benutzer zu erstellen (Human Resources!!!),
wie kann ich im Code einen User mitgeben wo die Rechte besitzt und die
User trotzdem angelegt werden können?

-
public static string CreateUser(string FirstName, string LastName, string
FullName, string LogonName, string ProfilePath, string Password, string
LogonScript, string PersonalNummer)
{
try
{
DirectoryEntry ent = new DirectoryEntry();
DirectoryEntry ou = ent.Children.Find("OU=Abteilung_FC,OU=Stamm");
DirectoryEntry user = ou.Children.Add("CN=" + FullName + "", "user");
//ADS Properties
user.Properties["givenname"].Value = FirstName;
user.Properties["sn"].Value = LastName;
user.Properties["displayname"].Value = FullName;
user.Properties["userPrincipalName"].Value = LogonName + "@" +
Properties.Settings.Default.Domain;
user.Properties["samAccountName"].Value = LogonName;

if (!string.IsNullOrEmpty(LogonScript))
{
user.Properties["scriptPath"].Value = LogonScript;
}

if (!string.IsNullOrEmpty(ProfilePath))
{
user.Properties["profilePath"].Value = ProfilePath;
}
user.CommitChanges();

//Set ADS Password Properties
user.Invoke("SetPassword", new object[] { Password });
user.Properties["userAccountControl"].Value = 0x200;
user.Properties["pwdLastSet"].Value = 0;
user.CommitChanges();
user.Close();

return ("Benutzerkonto für " + FullName + " wurde erfolgreich
erstellt.");
}

catch (Exception ex)
{
return (ex.Message);
}
}
-



Danke für jeden Tip
Volkan von Klass



Ähnliche fragen