Obtener cuentas de usuario locales a la manera de PowerShell
Parece que siempre veo solicitudes y problemas para obtener cuentas de usuarios locales usando PowerShell. Sin embargo, aunque estamos en PowerShell 5.0, Microsoft nunca ha lanzado un conjunto de cmdlets para administrar cuentas de usuarios locales. Muchos de nosotros hemos recurrido a la creación de nuestras propias herramientas. Ahora tengo mi última versión de una función para obtener información de cuentas de usuarios locales desde computadoras remotas.
La función toma una especie de atajo utilizando el acelerador de tipo ADSI para conectarse a una computadora remota. Esta es la misma técnica que usábamos en los días de VBScript. Sin embargo, esta técnica no conduce a credenciales alternativas y requiere protocolos heredados como RPC y DCOM. Pero eso no es necesariamente un problema, como les mostraré en unos minutos.
La función se conecta a la computadora remota y luego utiliza algún objeto COM vudú para enumerar la información de la cuenta local. De forma predeterminada, el comando enumerará todas las cuentas de usuario.
O puede especificar un único nombre de cuenta de usuario.
La función acepta entradas de canalización, lo que facilita la verificación de varios servidores a la vez.
import-csv s:\computers.csv | get-localuser Administrator | Select Computername,User,Enabled,PasswordAgeDaysUna nota importante: si consulta un controlador de dominio, obtendrá cuentas de dominio.
Recuerde que mencioné que este comando usa protocolos heredados. Una alternativa es utilizar la comunicación remota de PowerShell e Invoke-Command. Primero, cree las PSSessions necesarias y utilice credenciales alternativas si es necesario.
$s = new-pssession -computer chi-core01,chi-web02,chi-fp02Luego obtenga el bloque de script de la función.
$sb = ${function:Get-localuser}Ahora puedes usar esto con Invoke-Command:
invoke-command -scriptblock $sb -session $s -hidecomputername | select * -exclude RunspaceID | out-gridview -title "Local"
O consultar para una cuenta específica:
invoke-command -scriptblock $sb -session $s -hidecomputername -ArgumentList Administrator
Puedes encontrar el script completo, que incluye un alias en Github.
:
Espero que me cuentes lo que piensas y que encuentres esta una adición útil a tu caja de herramientas de PowerShell. Si tiene problemas, publíquelos en la página Gist.