非管理员,如果我的计算机不是域的成员,如何使用PowerShell更改我的活动目录密码?

问题描述 投票:0回答:1

我以非域用户身份登录到笔记本电脑。

我使用Open VPN连接到远程网络,并且可以在系统提示时输入我的域凭据,从而通过该VPN访问域资源,例如CIFS共享。

我想使用PowerShell更改远程域上的密码。

我将当前的凭据存储为$ credentials,这是一个System.Management.Automation.PSCredential对象。

我将新密码存储为$ newPassword,一个安全字符串,

当我的计算机不是域的成员时,非管理员如何使用PowerShell更改我的活动目录密码?

域的FQDN d0-ad.domain.com解析为域控制器IP地址。我已将netbios名称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,则会收到错误:

format-default:检索成员“ distinguishedName”时发生以下异常:“发生了本地错误。”+ CategoryInfo:未指定:(:) [format-default],ExtendedTypeSystemException+ FullyQualifiedErrorId:CatchFromBaseGetMember,Microsoft.PowerShell.Commands.FormatDefaultCommand

我知道凭据正确无误,并且目录连接正常,因为$ Searcher.FindOne()方法正确搜索,查找并返回了正确的用户。

所以我为什么会收到“发生本地错误。”?]

我以非域用户身份登录到笔记本电脑。我已使用Open VPN连接到远程网络,并且可以通过输入我的域来通过该VPN访问域资源,例如CIFS共享...

powershell active-directory ldap credentials ldap-query
1个回答
0
投票

该错误确实看起来很奇怪,但是我认为这可能是因为您没有提供适当的凭据。 [ADSI]类型的加速器只是创建DirectoryEntry对象的简写。因此,[ADSI]$user.Path等同于像在代码顶部一样创建DirectoryEntry,但没有用户名和密码。

© www.soinside.com 2019 - 2024. All rights reserved.