Ensure that emails in a user list belong only to approved educational or corporate domains.
Asegurar que los correos de un listado pertenezcan exclusivamente a dominios educativos o corporativos autorizados.
This exercise is for learning and testing purposes only. Do not run scripts against production directories, business-critical systems, enterprise repositories, user accounts, or identity-related datasets without proper authorization, testing, backups, change-control approval, least-privilege permissions, and compliance with your organization's cybersecurity policies.
Este ejercicio es únicamente para aprendizaje y pruebas. No ejecutes scripts contra directorios de producción, sistemas críticos, repositorios empresariales, cuentas de usuario o datos relacionados con identidad sin autorización, pruebas, respaldos, aprobación de control de cambios, permisos mínimos y cumplimiento de las políticas de ciberseguridad de tu organización.
An organization receives a CSV list of users, students, employees, vendors, or applicants. The file contains email addresses coming from multiple sources. Some records belong to the approved institutional domain, while others contain personal, external, misspelled, or unauthorized domains. Before importing the file into a system or using it for communication, the invalid domains must be separated for review.
Una organización recibe un archivo CSV con usuarios, estudiantes, empleados, proveedores o aplicantes. El archivo contiene correos electrónicos provenientes de diferentes fuentes. Algunos registros pertenecen al dominio institucional autorizado, mientras otros contienen dominios personales, externos, mal escritos o no autorizados. Antes de importar el archivo a un sistema o usarlo para comunicación, los dominios inválidos deben separarse para revisión.
| UserID | Name | |
|---|---|---|
| 1001 | Maria Lopez | maria.lopez@misistema.edu |
| 1002 | Juan Perez | juan.perez@gmail.com |
| 1003 | Ana Torres | ana.torres@misistema.edu |
| 1004 | Carlos Diaz | carlos.diaz@misistema.com |
| 1005 | Laura Smith | laura.smith@misistema.edu |
| 1006 | Pedro Ramos | pedro.ramos@yahoo.com |
The basic idea is to keep only email addresses that end with the approved domain.
La idea base es conservar solamente los correos que terminan con el dominio autorizado.
Import-Csv "C:\Data\Usuarios.csv" |
Where-Object { $_.Email -notmatch "@misistema\.edu$" }$sourceFile = "C:\Data\Usuarios.csv" $validFile = "C:\Data\Usuarios_Validos.csv" $reviewFile = "C:\Data\Usuarios_Dominio_Invalido.csv"
$users = Import-Csv -Path $sourceFile
This version supports more than one approved domain if the organization uses multiple institutional domains.
Esta versión permite más de un dominio autorizado si la organización usa varios dominios institucionales.
$approvedDomains = @(
"misistema.edu",
"staff.misistema.edu"
)$processed = foreach ($user in $users) {
$email = $user.Email.Trim().ToLower()
$domain = if ($email -match "@(.+)$") { $Matches[1] } else { "" }
if ($approvedDomains -contains $domain) {
$status = "Valid"
$issue = ""
}
elseif ([string]::IsNullOrWhiteSpace($email)) {
$status = "Review"
$issue = "Missing email"
}
elseif ($domain -eq "") {
$status = "Review"
$issue = "Invalid email format"
}
else {
$status = "Review"
$issue = "Unauthorized domain"
}
$user | Add-Member -NotePropertyName EmailDomain -NotePropertyValue $domain -Force
$user | Add-Member -NotePropertyName ValidationStatus -NotePropertyValue $status -Force
$user | Add-Member -NotePropertyName ValidationIssue -NotePropertyValue $issue -Force
$user
}$validUsers = $processed | Where-Object { $_.ValidationStatus -eq "Valid" }
$reviewUsers = $processed | Where-Object { $_.ValidationStatus -eq "Review" }
$validUsers | Export-Csv -Path $validFile -NoTypeInformation -Encoding UTF8
$reviewUsers | Export-Csv -Path $reviewFile -NoTypeInformation -Encoding UTF8
Write-Host "Valid users: $($validUsers.Count)"
Write-Host "Users for review: $($reviewUsers.Count)"$sourceFile = "C:\Data\Usuarios.csv"
$validFile = "C:\Data\Usuarios_Validos.csv"
$reviewFile = "C:\Data\Usuarios_Dominio_Invalido.csv"
$approvedDomains = @(
"misistema.edu",
"staff.misistema.edu"
)
$users = Import-Csv -Path $sourceFile
$processed = foreach ($user in $users) {
$email = $user.Email.Trim().ToLower()
$domain = if ($email -match "@(.+)$") { $Matches[1] } else { "" }
if ($approvedDomains -contains $domain) {
$status = "Valid"
$issue = ""
}
elseif ([string]::IsNullOrWhiteSpace($email)) {
$status = "Review"
$issue = "Missing email"
}
elseif ($domain -eq "") {
$status = "Review"
$issue = "Invalid email format"
}
else {
$status = "Review"
$issue = "Unauthorized domain"
}
$user | Add-Member -NotePropertyName EmailDomain -NotePropertyValue $domain -Force
$user | Add-Member -NotePropertyName ValidationStatus -NotePropertyValue $status -Force
$user | Add-Member -NotePropertyName ValidationIssue -NotePropertyValue $issue -Force
$user
}
$validUsers = $processed | Where-Object { $_.ValidationStatus -eq "Valid" }
$reviewUsers = $processed | Where-Object { $_.ValidationStatus -eq "Review" }
$validUsers | Export-Csv -Path $validFile -NoTypeInformation -Encoding UTF8
$reviewUsers | Export-Csv -Path $reviewFile -NoTypeInformation -Encoding UTF8
Write-Host "Valid users: $($validUsers.Count)"
Write-Host "Users for review: $($reviewUsers.Count)"| Name | Status | |
|---|---|---|
| Maria Lopez | maria.lopez@misistema.edu | Valid |
| Ana Torres | ana.torres@misistema.edu | Valid |
| Laura Smith | laura.smith@misistema.edu | Valid |
| Name | Issue | |
|---|---|---|
| Juan Perez | juan.perez@gmail.com | Unauthorized domain |
| Carlos Diaz | carlos.diaz@misistema.com | Unauthorized domain |
| Pedro Ramos | pedro.ramos@yahoo.com | Unauthorized domain |
Email domain validation is not only a formatting exercise. In institutional environments, email domains can be tied to identity management, access control, student records, employee onboarding, vendor communication, and cybersecurity policies. Invalid domains should normally be reviewed before access is granted or official communication is sent.
La validación de dominios de correo no es solamente un ejercicio de formato. En ambientes institucionales, los dominios pueden estar relacionados con gestión de identidad, control de acceso, expedientes estudiantiles, onboarding de empleados, comunicación con proveedores y políticas de ciberseguridad. Los dominios inválidos normalmente deben revisarse antes de otorgar acceso o enviar comunicación oficial.