🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónFiltrar y proyectar con where y project
5 tareas · 38 min · Principiante
Una tabla de inicios de sesión de un día tiene cientos de filas y casi todas son rutina. Leer bien KQL empieza por quitar lo que no importa: `where` deja pasar solo las filas que cumplen una condición y `project` deja solo las columnas que necesitas. En la Clínica Veterinaria Mastranto, el martes 9 de marzo, hay entradas normales, un intento fallido repetido, una cuenta bloqueada y una entrada de madrugada. Con cuatro o cinco filtros las separas. Todo es lectura del extracto de SigninLogs, en UTC.
Objetivo de la sala
Una tabla de inicios de sesión de un día tiene cientos de filas y casi todas son rutina. Leer bien KQL empieza por quitar lo que no importa: `where` deja pasar solo las filas que cumplen una condición y `project` deja solo las columnas que necesitas. En la Clínica Veterinaria Mastranto, el martes 9 de marzo, hay entradas normales, un intento fallido repetido, una cuenta bloqueada y una entrada de madrugada. Con cuatro o cinco filtros las separas. Todo es lectura del extracto de SigninLogs, en UTC.where recibe una condición y conserva las filas donde es verdadera. Con texto se usa == (igual) o != (distinto), y el valor va entre comillas dobles. == distingue mayúsculas de minúsculas: "CO" y "co" son valores distintos. Varias condiciones se combinan con and y or, y in compara contra una lista de valores.
Hay un detalle propio de los registros de Entra: ResultType es de tipo texto y vale "0" cuando el inicio de sesión salió bien. Cualquier otro valor es un fallo, con un código que dice por qué. Por eso ResultType != "0" es la forma corta de decir «todo lo que falló». Prueba SigninLogs | where ResultType != "0" en la consola.
Responde para continuar
¿Cómo se escribe el filtro que deja solo los inicios de sesión correctos de SigninLogs?
Ver pista de ayuda
En la sala anterior viste el tipo de la columna ResultType con getschema.
Después de un filtro, count resume el resultado en una cifra. El código 50126 significa que las credenciales (usuario o contraseña) no eran correctas, y la documentación de errores de Entra avisa de que es normal ver algunos en los registros porque las personas se equivocan al teclear. Lo que no es normal es verlos repetidos, seguidos y contra la misma cuenta.
Responde para continuar
¿Cuántos inicios de sesión del extracto fallaron por credenciales no válidas (código 50126)? Escribe solo el número.
Ver pista de ayuda
Escribe `SigninLogs | where ResultType == "50126" | count`.
Un fallo repetido suele terminar en otro código. 50053 indica que la cuenta quedó bloqueada por demasiados intentos con credenciales incorrectas. Es una señal útil de lectura: dice que alguien insistió lo bastante como para activar el bloqueo, aunque no dice quién era. Para saber a quién le pasó basta filtrar por ese código y leer la columna de la cuenta.
Responde para continuar
Escribe la cuenta que quedó bloqueada por intentos fallidos (código 50053).
Ver pista de ayuda
Escribe `SigninLogs | where ResultType == "50053"` y lee UserPrincipalName.
Acotar el tiempo es el filtro más importante: reduce el trabajo y evita mezclar días. between (A .. B) deja las filas con valor entre A y B, incluidos ambos extremos, y las fechas se escriben con datetime(...). En una consulta de vigilancia que corre cada día se usaría una ventana relativa, como ago(1d), pero para revisar un hecho pasado con hora conocida una ventana fija es lo correcto.
La clínica trabaja de día, así que una entrada administrativa de madrugada merece mirarse. Acota entre las 02:00 y las 05:00 UTC del martes 9 y lee de dónde venía.
Responde para continuar
¿Desde qué dirección IP se inició sesión entre las 02:00 y las 05:00 UTC del 9 de marzo?
Ver pista de ayuda
Escribe `SigninLogs | where TimeGenerated between (datetime(2027-03-09T02:00:00Z) .. datetime(2027-03-09T05:00:00Z))`.
project elige qué columnas se quedan y en qué orden; las demás desaparecen del resultado. Sirve para dejar la vista legible, por ejemplo hora, cuenta, dirección y código. extend hace otra cosa: añade una columna calculada y conserva todas las que ya había. Lo normal es combinarlos: primero se calcula lo que falta con extend y luego se deja lo necesario con project.
Prueba SigninLogs | where ResultType != "0" | project TimeGenerated, UserPrincipalName, IPAddress, ResultType y después la versión con extend, que marca cada fallo como de origen habitual o nuevo según el país.
Responde para continuar
Tienes una tabla de nueve columnas y escribes `extend Origen = ...` seguido de `project Origen`. ¿Qué columnas quedan en el resultado?
Ver pista de ayuda
Piensa qué hace cada operador con las columnas que no nombras.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.