डोमेन खातों के साथ आप जो देख रहे हैं, उसे करने के लिए कुछ 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वस्तु, हालांकि, मशीन-स्थानीय खातों के लिए काम नहीं करेगा, तो बस कोड retrofitting के साथ ऊपर 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)
यह कोड मानता है कि आप स्थानीय मशीन ("") पर एक पासवर्ड बदल रहे हैं।