eli*_*uck 18 windows powershell password
在 Windows Server 2008 R2 上,我有一个标准(非管理员)本地用户(不是 Active Directory 帐户,但服务器位于域中),他只能通过 PowerShell Remoting 访问服务器。用户无法通过 RDP 登录。
我希望这个用户能够更改他们的密码。“net user”命令需要管理员权限,即使用户试图更改自己的密码。
标准用户如何从命令行更改密码?
Eva*_*son 18
以下是一些 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)
Run Code Online (Sandbox Code Playgroud)
ASDI 提供程序还支持WinNT://computername/username该ChangePassword()方法的语法。ADSystemInfo但是,该对象不适用于机器本地帐户,因此仅使用WinNT://...语法改进上面的代码是行不通的。
(有人想建议使用代码进行编辑以区分本地帐户和域帐户吗?)
以完全不同的方式,旧NetUserChangePasswordAPI 也将与本地(和域,前提是您在 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)
Run Code Online (Sandbox Code Playgroud)
此代码假定您正在更改本地计算机上的密码(“.”)。
这在 PowerShell 中实际上非常简单:
([ADSI]'LDAP://CN=User,CN=Users,DC=domain').ChangePassword('currentpassword','newpassword')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17207 次 |
| 最近记录: |