Aquí hay un código de PowerShell para hacer lo que está buscando con las cuentas de dominio:
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)
El proveedor ASDI también admite la sintaxis WinNT://computername/username
para el ChangePassword()
método. El ADSystemInfo
objetivo, sin embargo, no funcionará para las cuentas de equipo local, por lo que sólo reequipamiento el código anterior con la WinNT://...
sintaxis no es viable.
(¿Alguien quiere sugerir una edición con código para diferenciar entre cuentas locales y de dominio?)
En una táctica completamente diferente, la antigua NetUserChangePassword
API también funcionará con cuentas locales (y de dominio, siempre que especifique el nombre de dominio en la sintaxis de 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)
Este código supone que está cambiando una contraseña en la máquina local (".").