Como puedo saber en que equipos esta logueado un usuario de Active Directory con powershell

Juan Luis Becerril Franco 0 Puntos de reputación
2024-11-11T22:10:44.25+00:00

Tengo una cuenta de dominio bloqueada perono cuantoconun programa de auditoria, como puedo saber enque equipos esa cuenta tiene la sesion abierta

Windows para empresas | Windows Server | Experiencia del usuario | Otros
0 comentarios No hay comentarios
{count} votos

2 respuestas

Ordenar por: Muy útil
  1. Gao Chen 10,665 Puntos de reputación Personal externo de Microsoft Moderador
    2024-11-11T22:51:32.8333333+00:00

    Hola Juan Luis Becerril Franco,

    ¡Bienvenido(a) a Microsoft Q&A!

    En este caso, puedes usar un script. Para esto, puedes seguir los siguientes pasos:

    1. Instala el módulo de Active Directory si aún no lo tienes:
       Install-WindowsFeature -Name RSAT-AD-PowerShell
    
    1. Usa el siguiente script para buscar los equipos donde el usuario ha iniciado sesión. Este script consulta los registros de eventos de seguridad en los controladores de dominio:
       $username = "nombre_de_usuario"  # Reemplaza con el nombre del usuario
       $computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
    
       foreach ($computer in $computers) {
           try {
               $sessions = Get-WinEvent -ComputerName $computer -FilterHashtable @{LogName='Security'; ID=4624} -ErrorAction Stop |
                           Where-Object { $_.Properties[5].Value -eq $username }
    
               if ($sessions) {
                   Write-Output "$username ha iniciado sesión en $computer"
               }
           } catch {
               Write-Output "No se pudo acceder a $computer"
           }
       }
    

    Explicación:

    • Get-ADComputer: Obtiene todos los equipos en Active Directory.
    • Get-WinEvent: Consulta los eventos de inicio de sesión (ID 4624) en cada equipo.
    • Try/Catch: Maneja errores si no se puede acceder a un equipo.

    Este script puede tardar un poco dependiendo de la cantidad de equipos en tu dominio. Asegúrate de tener los permisos necesarios para acceder a los registros de eventos en cada máquina.

    Espero que información brindada fuera útil. Si necesitas más asistencia, estoy a tu disposición.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.


  2. Anónimas
    2024-11-12T03:46:24.28+00:00

    Hola Juan Luis Becerril Franco,

    Gracias por tu publicación en Microsoft Q&A.

    Puede filtrar los eventos 4624 que se registran por defecto en el registro de seguridad de su DC y, a continuación, analizar la propiedad «Message» de los eventos para comprobar los campos Nombre de cuenta y Dirección de red de origen.

    $xmlQuery = @'
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) &lt;= 3600000]]]</Select>
      </Query>
    </QueryList>
    '@
    
    $results=@()
    Get-WinEvent -FilterXML $xmlQuery | Where-Object { $_.Message -notmatch '(?<=Account Name:\s+)\w+.+\$'} | ForEach-Object {
        $_.Message -match '(?<=Account Name:\s+)\w+.+' | Out-Null
        $account = [string]$matches.Values
        $_.Message -match '(?<=Source Network Address:\s+)\w+.+' | Out-Null
        $address = [string]$matches.Values
    
        $results += [PSCustomObject]@{
            "Account Name" = $account
            "IP Address" = $address
        }
    }
    $results | Format-List 
    

    Este script comprueba los inicios de sesión en 3600000 milisegundos (una hora) y puede modificarlo usted mismo.

    Saludos cordiales, Ian Xue


    Si la respuesta es útil, haga clic en «Aceptar respuesta» y vote por ella.

    0 comentarios No hay comentarios

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.