Berikut ini beberapa kode PowerShell untuk melakukan apa yang Anda cari dengan akun domain:
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)
Penyedia ASDI juga mendukung sintaks WinNT://computername/username
untuk ChangePassword()
metode ini. The ADSystemInfo
objek, bagaimanapun, tidak akan bekerja untuk account mesin-lokal, jadi hanya perkuatan kode di atas dengan WinNT://...
sintaks tidak bisa diterapkan.
(Adakah yang ingin menyarankan edit w / kode untuk membedakan antara akun lokal dan domain?)
Pada taktik yang sama sekali berbeda, NetUserChangePassword
API lama akan bekerja dengan akun lokal (dan domain, asalkan Anda menentukan nama domain dalam sintaks NetBIOS), juga:
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)
Kode ini mengasumsikan Anda mengubah kata sandi di mesin lokal (".").