Cambia la contraseña del administrador de múltiples ordenadores con PowerShell
En esta ocasión vamos a analizar un script de PowerShell el cual le permitirá cambiar la contraseña de administrador local en varios equipos remotos. También se podría utilizar el script para cambiar la contraseña de otras cuentas.
Haciendo un poco de historia, hace no mucho tiempo los administradores de sistemas se veían con la tediosa labor de cambiar la contraseña de administrador de forma manual en todos sus ordenadores a su cargo. Cuando esta labor son 10-20 ordenadores no es algo tan complicado, pero. ¿Qué pasaría sin son mas de mil, o de dos mil? Exacto, al administrador le tocaría pasarse toda la semana cambiando contraseñas. Debido a ello en ese entonces ya se avanzo mucho en el tema de la automatización.
Y las cosas han evolucionado hasta el hecho de utilizar lenguajes de programación como VBScript (Visual Basic Script) para automatizar tareas.
En estos días toda esta misión de automatización se ha convertido en una tarea mucho más fácil debido a la introducción de PowerShell.
Por lo tanto, en esta ocasión vamos a ver cómo podemos cambiar la contraseña de administrador local para una serie de ordenadores usando un script de PowerShell.
Cambiar la contraseña de administrador con PowerShell
$password = Read-Host "Enter the password" -AsSecureString
$confirmpassword = Read-Host "Confirm the password" -AsSecureString
$pwd1_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
$pwd2_text = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($confirmpassword))
if($pwd1_text -ne $pwd2_text) {
Write-Error "Entered passwords are not same. Script is exiting"
exit
}
Como podrías darte cuenta, en el código anterior se pide a confirmar la contraseña, con lo cual si no se ha introducido la contraseña correctamente el script se ejecutará de nuevo.
También se esta declarando que la contraseña sea un campo seguro, para que nadie pueda ver lo que se esta escribiendo en dicho campo.
Tras escribir la contraseña y confirmarla, las dos siguientes líneas de código dotnet, convierten estas dos líneas en texto plano para compararlos.
Si la comparación falla, el script finaliza, en caso contrario continua.
Ahora nosotros tenemos el password, ahora es el momento de leer la lista de equipos desde un archivo de texto.
Lista de lectura de los ordenadores
if(!(Test-Path $InputFile)) {
Write-Error "File ($InputFile) not found. Script is exiting"
exit
}
$Computers = Get-Content -Path $InputFile
Antes de leer el archivo de texto, estoy haciendo una comprobación para ver si ese archivo existe o no. Si el archivo no se encuentra, el script finaliza. De lo contrario, el script lee el contenido del archivo con el "cmdlet Get-Content" y almacena la lista de equipos en un array llamado "$Computers"
Ahora que ya tenemos la lista de equipos, podemos empezar a cambiar la contraseña de cada equipo. Eso es lo que el código de abajo no.
Cambiando la contraseña en varios equipos
foreach ($Computer in $Computers) {
$Computer = $Computer.toupper()
$Isonline = "OFFLINE"
$Status = "SUCCESS"
Write-Verbose "Working on $Computer"
if((Test-Connection -ComputerName $Computer -count 1 -ErrorAction 0)) {
$Isonline = "ONLINE"
Write-Verbose "`t$Computer is Online"
} else { Write-Verbose "`t$Computer is OFFLINE" }
try {
$account = [ADSI]("WinNT://$Computer/Administrator, user")
$account.psbase.invoke("setpassword", $pwd1_text)
Write-Verbose "`tPassword Change completed successfully"
}
catch {
$status = "FAILED"
Write-Verbose "`tFailed to Change the administrator password. Error: $_"
}
$obj = New-Object -TypeName PSObject -Property @{
ComputerName = $Computer
IsOnline = $Isonline
PasswordChangeStatus = $Status
}
$obj | Select ComputerName, IsOnline, PasswordChangeStatus
if($Status -eq "FAILED" -or $Isonline -eq "OFFLINE") {
$stream.writeline("$Computer `t $isonline `t $status")
}
}
Aquí se puede apreciar que estoy recorriendo cada equipo que se encuentra en el array que hemos creado anteriormente ($Computers), y en primer lugar estamos verificando que cada equipo este online o no utilizando el cmdlet Test-Connection (Un cmdlet , pronunciado "command-let", es la unidad de funcionalidad más pequeña del Shell de administración de Exchange). Este cmdlet realiza un "ping" enviando un paquete ICMP al equipo destino. Si el ping es exitoso, el script cambia el password.
Para hacer esto yo estoy haciendo uso de la interfaz de Windows NT, que es famosa desde los días de VBScript.
Después de obtener la referencia a la cuenta del administrador invoco un método llamado " SetPassword" para cambiar la password. Si algo fallo durante el cambio de contraseña, el error será capturado por el bloque catch para que quede registrado.
Pues esto seria todo, si el script ha hecho su trabajo el resultado se vería por la consola.
Como podrías darte cuenta en la salida, el script crea una lista de equipos en los que la contraseña ha fallado. El archivo de " failed-computers.txt " se almacena en el directorio donde el script cogió la lista de equipos. Si desea proporcionar un directorio diferente en el que desea almacenar los archivos, sólo tiene que pasar el nombre del directorio al parámetro - OutputDirectory durante la ejecución del script.
Algunos consejos para el uso de este script
Utiliza el comando de tipo de "Get-Help. \ Update-LocalAdministratorPassword.ps1-detalladas" en una consola de PowerShell para obtener ayuda.
• Use la opción – Verbose desde la línea de comandos si desea ver la información de depuración y mensajes de error en cada etapa.
• Pasar el nombre del archivo al script es opcional. El script le preguntará por el archivo si no lo has pasado.
• Utilizando este script puede cambiar la contraseña de cualquier cuenta local. Basta con sustituir "administrador" con el nombre de cuenta que desea cambiar la contraseña.
Si quieres aprender mucho más sobre los secretos de lo sistemas Microsoft Windows, deberías leer el libro de Sergio de los Santos "Máxima Seguridad en Windows: Secretos Técnicos" y, por último, te recordamos que si te ha gustado el artículo puedes suscribirte al Canal RSS de Windows Técnico para estar al día de las novedades e información técnica de interés.
Añade tu comentario
Comentarios de Cambia la contraseña del administrador de múltiples ordenadores con PowerShell
Sobre esta noticia
Autor: Windowstecnico (169 noticias)
Fuente: windowstecnico.com
Visitas de esta noticia: 329
Tipo: Reportaje
Esta noticia se publica con licencia: Distribución gratuita
-
24-05-2012. Aunque me gusta la estética de gnome shell no termina de convencerme que se utilice la parte inferior de la pantalla como tablón...
-
23-05-2012. Gnome Shell trae entre sus “novedades” la desaparición de los botones de maximizar y minimizar. En mi caso me...
-
22-05-2012. Gnome Shell nos permite agregar nuevas características, personalizaciones o funciones por medio de las extensiones. Como ya os...











