Đây là một số mã PowerShell để thực hiện những gì bạn đang tìm kiếm với tài khoản miền:
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)
Nhà cung cấp ASDI cũng hỗ trợ cú pháp WinNT://computername/username
cho ChangePassword()
phương thức. Các ADSystemInfo
đối tượng, tuy nhiên, sẽ không làm việc cho các tài khoản máy địa phương, vì vậy chỉ cần trang bị thêm các mã trên với WinNT://...
cú pháp là không khả thi.
(Bất kỳ ai cũng muốn đề xuất chỉnh sửa w / code để phân biệt giữa tài khoản cục bộ và tài khoản miền?)
Trên một chiến thuật hoàn toàn khác, NetUserChangePassword
API cũ cũng sẽ hoạt động với các tài khoản cục bộ (và tên miền, miễn là bạn chỉ định tên miền trong cú pháp 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)
Mã này giả sử bạn đang thay đổi mật khẩu trên máy cục bộ (".").