Powershell
標準 Windows 使用者如何從命令行更改密碼?
在 Windows Server 2008 R2 上,我有一個標準(非管理員)本地使用者(不是 Active Directory 帳戶,儘管伺服器位於域中),他只能通過 PowerShell Remoting 訪問伺服器。使用者無法通過 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 提供程序還支持該
WinNT://computername/username
方法的語法ChangePassword()
。但是,該對ADSystemInfo
像不適用於機器本地帳戶,因此僅使用WinNT://...
語法修改上面的程式碼是行不通的。(有人想建議使用程式碼進行編輯以區分本地帳戶和域帳戶嗎?)
在完全不同的策略上,舊
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)
此程式碼假定您正在更改本地電腦上的密碼(“.”)。