站长网 Windows powershell – 标准Windows用户如何从命令行更改其密码?

powershell – 标准Windows用户如何从命令行更改其密码?

在 Windows Server 2008 R2上,我有一个标准(非管理员)本地用户(不是Active Directory帐户,但服务器位于域中),只能通过PowerShell远程处理访问服务器.用户无法通过RDP登录. 我希望这个用户能够更改他们的密码. “net user”命令需要管理员权限,即使用户尝试


Windows Server 2008 R2上,我有一个标准(非管理员)本地用户(不是Active Directory帐户,但服务器位于域中),只能通过PowerShell远程处理访问服务器.用户无法通过RDP登录.

我希望这个用户能够更改他们的密码. “net user”命令需要管理员权限,即使用户尝试更改自己的密码也是如此.

标准用户如何从命令行更改密码?

以下是一些PowerShell代码,可以使用域帐户执行您正在寻找的内容:

param (
    [string]$oldPassword = $( Read-Host "Old password"),[string]$newPassword = $( Read-Host "New password")
)

$ADSystemInfo = New-Object -ComObject ADSystemInfo
$type = $ADSystemInfo.GetType()
$user = [ADSI] "LDAP://$($type.InvokeMember('UserName','GetProperty',$null,$ADSystemInfo,$null))"
$user.ChangePassword( $oldPassword,$newPassword)

ASDI提供程序还支持ChangePassword()方法的语法WinNT:// computername / username.但是,ADSystemInfo对象不适用于机器本地帐户,因此只使用WinNT:// …语法改进上述代码是不可行的.

(任何人都想建议编辑w /代码来区分本地和域帐户?)

在完全不同的方面,旧的NetUserChangePassword API也适用于本地(和域,如果您在NetBIOS语法中指定域名)帐户:

param (
    [string]$oldPassword = $( Read-Host "Old password"),[string]$newPassword = $( Read-Host "New password")
)

$MethodDefinition = @'
[DllImport("netapi32.dll",CharSet = CharSet.Unicode)]
public static extern bool NetUserChangePassword(string domainname,string username,string oldPassword,string newPassword);
'@

$NetAPI32 = Add-Type -MemberDefinition $MethodDefinition -Name 'NetAPI32' -Namespace 'Win32' -PassThru

$NetAPI32::NetUserChangePassword('.',$env:username,$oldPassword,$newPassword)

此代码假定您正在更改本地计算机上的密码(“.”).

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/server/windows/2021/0523/4928.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部