Mã này sẽ tạo ra một tài khoản cục bộ với mật khẩu không bao giờ hết hạn tùy chọn thiết lập:
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", "[email protected]");
obUser.Invoke("Put", new object[] {"UserFlags", 0x10000});
obUser.CommitChanges();
}
Các 0x10000 cờ nghĩa PasswordNeverExpires.
Tôi đã dành một thời gian dài để tìm hiểu cách tạo tài khoản người dùng cục bộ với mật khẩu được đặt không hết hạn. Có vẻ như khi bạn cố gắng sử dụng:
int val = (int)newUser.Properties["userAccountControl"].Value;
newUser.Properties["userAccountControl"].Value = val | 0x10000
quyền từ thư mục hoạt động có hiệu lực. Nếu bạn có quyền thư mục hoạt động, mọi thứ hoạt động tốt. Nếu bạn không nhận được thuộc tính userAccountControl sẽ luôn dẫn đến giá trị null. Cố gắng đặt userAccountControl sẽ dẫn đến một ngoại lệ "Không thể tìm thấy thuộc tính thư mục trong bộ nhớ cache".
Tuy nhiên sau nhiều lần khám phá xung quanh, tôi tìm thấy một thuộc tính khác "UserFlags" cần được đặt bằng cách sử dụng Gọi. Bạn có thể sử dụng điều này để đặt cờ trên tài khoản cục bộ. Tôi đã thử mã này và nó đã làm việc trên windows server 2008.
Hy vọng điều này sẽ giúp
Nguồn
2009-03-24 11:52:39
Các liên kết bạn chỉ định là cho thư mục hoạt động. Có lẽ tôi không rõ ràng. Tôi muốn thay đổi tài khoản người dùng cục bộ (Máy tính không phải là một phần của thư mục hoạt động). – mrtaikandi
Theo như tôi nhớ, nó cũng nên áp dụng cho các tài khoản cục bộ. – splattne
@ Mohammadreza: Tôi đã cập nhật câu trả lời của mình. Bây giờ có mã xử lý các tài khoản cục bộ – splattne