Я использую сценарий PowerShell, который нашел в Интернете, пытаясь использовать процессор win7 для удаленного изменения паролей на Windows Server 2008 через RSAT. Прямо сейчас server 2008 и win7 являются виртуальными машинами, а процессор win7 привязан к серверу и может правильно запускать модуль Active Directory для powershell. Я новичок в PowerShell и имею дело с серверами [этот проект - мое обучение на стажировке], и я получаю сообщение об ошибке при попытке скомпилировать этот скрипт.
import-Module ActiveDirectory
Function Set-AdUserPwd
{
Param(
[string]$user,
[string]$pwd
) #end param
$oUser = [adsi]"LDAP://$user"
$ouser.psbase.invoke("SetPassword",$pwd)
$ouser.psbase.CommitChanges()
} # end function Set-AdUserPwd
Set-AdUserPwd -user "cn=test,ou=Users,dc=ifrit,dc=local" -pwd P@ssword1
Exception calling "Invoke" with "2" argument(s): "There is no such object on the server.
"
At line:10 char:25
+ $ouser.psbase.invoke <<<< ("SetPassword",$pwd)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Я подумал, что, возможно, «invoke» - это что-то только в PowerShell 3, но, посмотрев статью о технологиях, говорится, что это применимо и к PowerShell 2. У меня есть учетная запись в AD как «тестовая», но я не уверен, что это фактическое общее имя (Имя: Тест, Фамилия: Тест, Имя для входа в систему: test@ifrit.local) Может ли кто-нибудь сказать мне, есть ли исключение имеет в виду, что у меня неправильный CN ИЛИ это что-то совсем другое?
Согласитесь с комментариями выше.
Вы можете отбросить ссылки на ADSI (интерфейс сценариев Active Directory), поскольку это «старый» способ работы; модуль Active Directory PS был разработан, чтобы заменить его.
Итак, в вашем случае вам сначала нужно подтвердить, что объект пользователя существует. Вы можете сделать это с помощью Get-ADUser командлет, основанный на выбранных вами критериях поиска. Теперь, на этом этапе, я бы предложил сделать поиск достаточно предписывающим, то есть вы возвращаете только один пользовательский объект, например:
try {
$objUser = Get-ADUser -Filter { Name -eq $user }
//
// rest of code here
//
}
catch{
Write-Host "ERROR : Failed to locate user.";
}
Затем вы можете использовать Set-ADAccountPassword командлет для сброса пароля (см. гиперссылку). Для этого требуется отличительное имя (DN) пользователя, которое будет атрибутом вашего $ objUser объект, возвращенный Get-ADUser вызов.
Я не могу проверить это здесь, поэтому, если вы попробуете это из интерактивной командной строки PowerShell, вы увидите, какие атрибуты существуют для вашего $ objUser объект:
$test = Get-ADUser -Filter { Name -eq "jimbob" }
$test | Get-Member
Я подозреваю, что есть DN или DistinguishedName атрибут, но, как я уже сказал, отсюда я не могу проверить.
Попробуйте и обновляйте здесь прогресс, если вам нужна дополнительная помощь ...