use strict; use warnings; use Net::LDAP; use Unicode::Map8; use Unicode::String qw(utf16); my $password = "Abc123Xyz"; my $newpass = 'N0tS0S1mple'; my $cn = 'Test User'; my $baseDN = "CN=Users,DC=company,DC=com"; my $ldap = Net::LDAP->new( 'ldaps://adserver.company.com' ) or die "couldn't talk to ldap server\n"; my $mesg = $ldap->bind( "cn=$cn, $baseDN", password => $password); print $mesg->error."\n" if ($mesg->code); my $charmap = Unicode::Map8->new('latin1') or die; my $oldUniPW = $charmap->tou('"'.$password.'"')->byteswap()->utf16(); my $newUniPW = $charmap->tou('"'.$newpass.'"')->byteswap()->utf16(); my $mesg = $ldap->modify("cn=$cn,$baseDN", changes => [ delete => [ unicodePwd => $oldUniPW ], add => [ unicodePwd => $newUniPW ] ]); die("Unable to reset Active Directory password: ".$mesg->error) if ($mesg->error ne "Success");