Используйте синтаксис вызова «сценарий точечного пространства». Например, вот как это сделать, используя полный путь к скрипту:
. /path/to/set_env_vars.sh
А вот как это сделать, если вы находитесь в том же каталоге, что и скрипт:
. set_env_vars.sh
Они выполняют скрипт под текущей оболочкой вместо загрузки другой (что произойдет, если вы это сделаете ./set_env_vars.sh
). Поскольку он работает в той же оболочке, заданные переменные среды будут доступны после его выхода.
Это то же самое, что и вызов source set_env_vars.sh
, но он короче набирает текст и может работать в некоторых местах, где source
нет.
Вы можете использовать метод UserPrincipal class ' SetPassword , если у вас достаточно прав, как только вы найдете правильный объект UserPrincipal. Используйте FindByIdentity для поиска рассматриваемого основного объекта.
using (var context = new PrincipalContext( ContextType.Domain ))
{
using (var user = UserPrincipal.FindByIdentity( context, IdentityType.SamAccountName, userName ))
{
user.SetPassword( "newpassword" );
// or
user.ChangePassword( "oldPassword", "newpassword" );
user.Save();
}
}
Вот отличный краткий справочник по программированию Active Directory:
Howto: ( Почти) Все в Active Directory через C #
См. Код сброса пароля в конце.
public void ResetPassword(string userDn, string password)
{
DirectoryEntry uEntry = new DirectoryEntry(userDn);
uEntry.Invoke("SetPassword", new object[] { password });
uEntry.Properties["LockOutTime"].Value = 0; //unlock account
uEntry.Close();
}
Вот решение:
string newPassword = Membership.GeneratePassword(12, 4);
string quotePwd = String.Format(@"""{0}""", newPassword);
byte[] pwdBin = System.Text.Encoding.Unicode.GetBytes(quotePwd);
UserEntry.Properties["unicodePwd"].Value = pwdBin;
UserEntry.CommitChanges();