سؤال

كيف يمكنني إنشاء حساب مستخدم محلي باستخدام .NET 2.0 و C # وأيضا تكون قادرا على تعيين "كلمة المرور لا تنتهي أبدا" لم أليس كذلك.

لقد حاولت استخدام "Net.exe" باستخدام Process.Start وتمرير معلماتها، لكن يبدو أن "مستخدم صافي" غير قادر على تعيين "كلمة المرور لا تنتهي أبدا" لن.

هل كانت مفيدة؟

المحلول

اقرأ هذه المقالة ممتازة

Howto: (تقريبا) كل شيء في Active Directory عبر C #

هناك قسم "إنشاء حساب المستخدم" و "التعامل مع كلمات مرور المستخدم".

تحديث:

لتكييف رمز الحسابات المحلية استبدال الخطوط المعنية مع هذه:

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + 
    Environment.MachineName);
DirectoryEntry newUser = localMachine.Children.Add("localuser", "user");

هنا يبدأ مقتطف التعليمات البرمجية الأصلية لحسابات المجال:

public string CreateUserAccount(string ldapPath, string userName, 
    string userPassword)
{
    string oGUID = string.Empty;
    try
    {          
        string connectionPrefix = "LDAP://" + ldapPath;
        DirectoryEntry dirEntry = new DirectoryEntry(connectionPrefix);
        DirectoryEntry newUser = dirEntry.Children.Add
            ("CN=" + userName, "user");
        newUser.Properties["samAccountName"].Value = userName;

        int val = (int)newUser.Properties["userAccountControl"].Value; 
        newUser.Properties["userAccountControl"].Value = val | 0x10000; 

        newUser.CommitChanges();
        oGUID = newUser.Guid.ToString();

        newUser.Invoke("SetPassword", new object[] { userPassword });
        newUser.CommitChanges();

        dirEntry.Close();
        newUser.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //DoSomethingwith --> E.Message.ToString();    
    }
    return oGUID;
}

هناك بعض التفاصيل لفهمها عند التعامل مع كلمات مرور المستخدم والحدود حول كلمات المرور حول كلمات المرور مثل إجبار المستخدم على تغيير كلمة المرور الخاصة بتسجيل الدخول التالي، وتنكر المستخدم الحق في تغيير كلمات المرور الخاصة بهم، وإعداد كلمات المرور لنقلها أبدا، إلى متى تنتهي ، ويمكن تحقيق هذه المهام باستخدام أعلام UserAccountControl التي يتم عرضها في أقسام المتابعة.

يرجى الرجوع إلى هذا عظيم MSDN مقالة: إدارة كلمات مرور المستخدمللحصول على أمثلة وثائق فيما يتعلق بهذه الميزات.

CONST                          HEX
------------------------------------------
SCRIPT                         0x0001
ACCOUNTDISABLE                 0x0002
HOMEDIR_REQUIRED               0x0008
LOCKOUT                        0x0010
PASSWD_NOTREQD                 0x0020
PASSWD_CANT_CHANGE             0x0040
ENCRYPTED_TEXT_PWD_ALLOWED     0x0080
TEMP_DUPLICATE_ACCOUNT         0x0100
NORMAL_ACCOUNT                 0x0200
INTERDOMAIN_TRUST_ACCOUNT      0x0800
WORKSTATION_TRUST_ACCOUNT      0x1000
SERVER_TRUST_ACCOUNT           0x2000
DONT_EXPIRE_PASSWORD           0x10000
MNS_LOGON_ACCOUNT              0x20000
SMARTCARD_REQUIRED             0x40000
TRUSTED_FOR_DELEGATION         0x80000
NOT_DELEGATED                  0x100000
USE_DES_KEY_ONLY               0x200000
DONT_REQ_PREAUTH               0x400000
PASSWORD_EXPIRED               0x800000
TRUSTED_TO_AUTH_FOR_DELEGATION 0x1000000

نصائح أخرى

سيقوم هذا الرمز بإنشاء حساب محلي بكلمة مرور لا تنتهي صلاحية الخيار أبدا:

        using System.DirectoryServices;

        DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://localhost");
        DirectoryEntries entries = hostMachineDirectory.Children;
        bool userExists = false;
        foreach (DirectoryEntry each in entries)
        {
            userExists = each.Name.Equals("NewUser",  
            StringComparison.CurrentCultureIgnoreCase);
            if (systemtestUserExists)
                break;
        }

        if (false == userExists)
        {
            DirectoryEntry obUser = entries.Add("NewUser", "User");
            obUser.Properties["FullName"].Add("Local user");
            obUser.Invoke("SetPassword", "abcdefg12345@");
            obUser.Invoke("Put", new object[] {"UserFlags", 0x10000});
            obUser.CommitChanges();
        }

العلم 0x10000 يعني passwordneverexpires.

قضيت وقتا طويلا في معرفة كيفية إنشاء حساب مستخدم محلي مع تعيين كلمة المرور لعدم انتهاء صلاحيته. يبدو أنه عند محاولة استخدام:

int val = (int)newUser.Properties["userAccountControl"].Value; 
newUser.Properties["userAccountControl"].Value = val | 0x10000

أذونات من Active Directory تعال إلى اللعب. إذا كان لديك أذونات Active Directory كل شيء يعمل بشكل جيد. إذا لم تحصل بعد ذلك، فستؤدي خاصية UserAccountControl إلى قيمة فارغة. سيؤدي محاولة تعيين UserAccountControl إلى استثناء "لا يمكن العثور على خاصية الدليل في ذاكرة التخزين المؤقت".

ولكن بعد الكثير من الصيد حول وجدت خاصية أخرى "userflags" يجب تعيينها باستخدام الدعارة. يمكنك استخدام هذا لتعيين العلم على حساب محلي. لقد جربت هذا الرمز وعملت على Windows Server 2008.

أتمنى أن يساعدك هذا

باستخدام system.directoryservices؛

    DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://localhost");
    DirectoryEntries entries = hostMachineDirectory.Children;
    bool userExists = false;
    foreach (DirectoryEntry each in entries)
    {
        userExists = each.Name.Equals("NewUser",  
        StringComparison.CurrentCultureIgnoreCase);
        if (systemtestUserExists)
            break;
    }

    if (false == userExists)
    {
        DirectoryEntry obUser = entries.Add("NewUser", "User");
        obUser.Properties["FullName"].Add("Local user");
        obUser.Invoke("SetPassword", "abcdefg12345@");
        obUser.Invoke("Put", new object[] {"UserFlags", 0x10000});
        obUser.CommitChanges();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top