我以非域用户身份登录到笔记本电脑。
我使用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共享...
该错误确实看起来很奇怪,但是我认为这可能是因为您没有提供适当的凭据。 [ADSI]
类型的加速器只是创建DirectoryEntry
对象的简写。因此,[ADSI]$user.Path
等同于像在代码顶部一样创建DirectoryEntry
,但没有用户名和密码。