Я вошел на ноутбук как пользователь без домена.
Я подключен к удаленной сети с помощью Open VPN и могу получать доступ к ресурсам домена через эту VPN, например к общему ресурсу CIFS, путем ввода учетных данных моего домена при появлении запроса.
Я хочу используйте PowerShell для изменения пароля в удаленном домене.
Мои текущие учетные данные хранятся в виде $ credentials, объекта System.Management.Automation.PSCredential.
Мой новый пароль хранится как $ newPassword, защищенная строка,
Как я, не являющийся администратором, могу изменить пароль моего активного каталога с помощью PowerShell, если мой компьютер не является членом домена?
Полное доменное имя домен d0-ad.domain.com преобразуется в IP-адрес контроллера домена. Я добавил имя netb ios, NP-DOMAIN, в файл hosts, чтобы он также преобразовывался в контроллер домена.
Это часть скрипта, с которой у меня возникают проблемы:
Write-Verbose "Setting up DirectoryEntry object"
$DomainEntry = New-Object -TypeName System.DirectoryServices.DirectoryEntry "LDAP://$($netBiosName)" ,$credentials.UserName,$($credentials.GetNetworkCredential().password)
Write-Verbose "Setting up DirectorySearcher object"
$Searcher = New-Object -TypeName System.DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = $DomainEntry
$userName = $($credentials.UserName).Replace("$($netBiosName)\","")
Write-Verbose "Username set as $($userName)"
$Searcher.Filter = "(samaccountname=$($userName))"
$user = $Searcher.FindOne()
$userObject = [ADSI]$user.Path
if ($userObject) {
Write-Verbose "Changing password for user: $($user.Path)"
$userObject.ChangePassword($credentials.GetNetworkCredential().password, [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($NewPassword)))
} else {
Write-Verbose "User $($username) not found"
throw "User $($username) not found"
}
Проблема возникает в
$userObject = [ADSI]$user.Path
Если я пытаюсь получить доступ к $ userObject I получить сообщение об ошибке:
format-default: при извлечении члена «имя-различия» произошло следующее исключение: «Произошла локальная ошибка.» + CategoryInfo: NotSpecified: (:) [format-default], ExtendedTypeSystemException + FullyQualifiedErrorId: CatchFromBaseGetMember, Microsoft.PowerShell.Commands.FormatDefaultCommand
Я знаю, что учетные данные верны, и соединение с каталогом работает, потому что метод $ Searcher.FindOne () правильно ищет, находит, и возвращает правильного пользователя.
Так почему я получаю сообщение "Произошла локальная ошибка."?