Powershell

標準 Windows 使用者如何從命令行更改密碼?

  • March 28, 2017

在 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://...語法修改上面的程式碼是行不通的。

(有人想建議使用程式碼進行編輯以區分本地帳戶和域帳戶嗎?)

在完全不同的策略上,舊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)

此程式碼假定您正在更改本地電腦上的密碼(“.”)。

引用自:https://serverfault.com/questions/570476