Búsqueda de sitios web

¿Cómo obtener una lista de administradores locales en las computadoras?


En este artículo, veremos cómo obtener una lista de usuarios y grupos que tienen derechos de administrador local en estaciones de trabajo y servidores de Windows en su red.

Encuentre administradores locales en la computadora local

En Windows, puede usar el complemento Administración de equipos (

compmgmt.msc

) para ver, agregar o eliminar usuarios en el grupo de administradores locales. Expanda Administración de equipos -> Usuarios locales y grupo -> Grupos. A continuación, seleccione el grupo Administradores.

De manera predeterminada, cuando una computadora con Windows se une a un dominio de Active Directory, los derechos de administrador se otorgan a los usuarios administradores locales y al grupo de seguridad Administradores de dominio.

Todos los demás usuarios o grupos se agregan al grupo Administradores por separado (manualmente, a través de la Política de grupo, scripts, etc.).

Puede usar el cmdlet Get-LocalGroupMember del módulo integrado Microsoft.PowerShell.LocalAccounts para enumerar los miembros del grupo de administradores locales:

Get-LocalGroupMember -Group "Administrators"

Tenga en cuenta que el parámetro Principal contiene el origen de este usuario/grupo, que puede ser el dominio Local, Active Directory o Azure AD.

Así es como puede enumerar solo los usuarios locales que tienen privilegios de administrador:

Get-LocalGroupMember Administrators | Where-Object { (Get-LocalUser $_.SID -ErrorAction SilentlyContinue).Enabled }

Puede filtrar la lista para incluir solo usuarios de AD:

Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"} | select PrincipalSource,class,name,SID

Si el módulo Active Directory para Windows PowerShell del paquete RSAT está instalado en su computadora, puede obtener información adicional sobre los usuarios o grupos de AD por sus SID.

En este ejemplo, la secuencia de comandos encuentra los miembros de todos los grupos de Active Directory que son administradores locales en esta computadora (el cmdlet Get-ADGroupMember se usa para obtener la lista de usuarios del grupo AD). Luego, Get-ADUser se usa para obtener SamAccountName y el estado de la cuenta.

Enabled = True/False
$admins=Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"}
Foreach ($admin in $admins)
{
If ($admin.objectclass -eq "User") {get-aduser $admin.sid|select SamAccountName,enabled }
If ($admin.objectclass -eq "Group") {Get-ADGroupMember $admin.sid | foreach { Get-ADUser $_ |Select-Object SamAccountName,enabled }}
}

Del mismo modo, puede obtener cualquier otro atributo de usuario de Active Directory.

Obtener miembro del grupo de administradores locales desde una computadora remota

El ejemplo anterior obtiene la lista de usuarios con derechos de administrador en la computadora local. Ahora veamos cómo obtener los miembros del grupo de administradores locales desde una computadora Windows remota.

Para ejecutar comandos en equipos remotos, debe configurar PowerShell Remoting y abrir el puerto de firewall TCP 5985. Puede habilitar y configurar WinRM (PSRemoting) mediante GPO y luego cambiar la configuración de la directiva de grupo del Firewall de Windows Defender para abrir un puerto adicional.

Use el cmdlet de PowerShell Invoke-Command para ejecutar un comando en una computadora remota. Para listar los administradores en la computadora remota llamada wsk-m2211, use el siguiente comando:

Invoke-Command -ComputerName wsk-m2211 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|select Name,ObjectClass,PrincipalSource|ft}

Ahora veamos cómo obtener una lista de administradores de varias computadoras. Para mayor comodidad, excluiremos el grupo Administradores de dominio de los resultados:

$results = Invoke-Command wsk-m2211,srv-sql01,srv-rds02 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name -notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource}
$results | Select-Object PSComputerName,Name,ObjectClass,PrincipalSource

Puede excluir al administrador integrado u otras cuentas de los resultados.

Utilice el comando Export-CSV para exportar la lista resultante de usuarios y grupos a un archivo CSV:

$results | Export-CSV "C:\PS\admins.CSV" -NoTypeInformation -Encoding UTF8

Puede consultar varias computadoras o servidores de un dominio simultáneamente. En este ejemplo, quiero obtener una lista de administradores en todos los hosts de Windows Server en AD. Use el cmdlet Get-ADComputer para enumerar las computadoras Windows Server habilitadas en Active Directory:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name

A continuación, obtenga la lista de miembros del grupo de administradores locales en cada host:

$results = Invoke-Command -ComputerName $computers -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name -notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource} -ErrorAction SilentlyContinue

Eliminación de usuarios del grupo de administradores locales

Es extremadamente importante que los administradores de la empresa realicen un seguimiento de los miembros del grupo de administradores locales en las computadoras del dominio. La idea principal es minimizar la cantidad de usuarios con derechos de administrador local.

Se recomienda que use Preferencias de directiva de grupo o Grupos restringidos para agregar automáticamente usuarios al grupo de administradores locales. Estos GPO agregarán automáticamente los usuarios requeridos al grupo Administradores y excluirán a todos los demás usuarios (que se agregan manualmente).

Puede eliminar manualmente un usuario del grupo de administradores locales con el comando:

Remove-LocalGroupMember -Group Administrators -Member username

Puede eliminar un usuario de un grupo en una computadora remota:

Invoke-Command -ComputerName wsk-m2211 -ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member username}

Sin embargo, hay un método más avanzado que puedes usar. Suponga que ha creado una lista de usuarios con privilegios administrativos en las computadoras y la ha guardado en la variable $resultados.

$results = Invoke-Command wsk-m2211,wsk-m2233 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name -notlike “*Domain Admins*”}|select Name,ObjectClass,PrincipalSource,SID}

Luego muestre una lista de usuarios y computadoras en forma de una lista Out-GridView:

$principals_to_remove=$results | Out-GridView -Title "Select principal to remove from local admins" -OutputMode Multiple

Lo siguiente que debe hacer es seleccionar los usuarios que desea eliminar del grupo Administradores (presione y mantenga presionada CTRL para seleccionar varias filas en la tabla) y ejecute el código:

foreach ($principal in $principals_to_remove)
{
Invoke-Command $principal.PSComputerName -ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member $using:principal.name}
}

Nota. El

$using:principal.name

construct le permite pasar un valor de variable local desde su computadora a una sesión remota de PSRemoting.

Esto eliminará a los usuarios que haya seleccionado del grupo de administradores locales en las computadoras remotas.

Artículos relacionados