The Challenge
An enterprise solution provider required robust management and systematic maintenance of its core infrastructure services. System failures, misconfigured Active Directory GPOs, and untracked manual file backups threatened the integrity of organizational databases and client data. The goal was to secure corporate directories, establish automated backup pathways, and formalize rapid incident triage procedures to guarantee business continuity.
The Solution
Administered physical and virtual Windows Server fleets, designing centralized Active Directory policies (GPOs) to enforce security standards. Implemented a robust **Veeam Backup & Replication** suite, routing volume snapshots to local NAS storage and offsite DR locations. Developed automated **PowerShell** monitoring scripts to audit backup logs daily and send automated alerts to IT support portals. Formulated systematic disaster recovery drills and network routing fallbacks to guarantee uptime.
Key Business Outcomes
- 99.9% Core Availability: Kept critical active directory domain controllers and file systems online, meeting strict SLAs of 99.9% uptime.
- Automated Backup Auditing: Slashed manual inspection times from hours to 0 via PowerShell event log auditing and SMTP notification systems.
- Hardened Active Directory: Cleaned and structured legacy organizational units (OUs), applying rigid security frameworks across 500+ client workstations.
- Rapid Disaster Recovery: Designed RPO/RTO metrics and automated backup recovery protocols, successfully reducing server recovery times during incidents by 50%.
Core Technologies
Operating Systems & Directory
Windows Server (2012 R2/2016), Active Directory Domain Services, Group Policy Objects (GPO), DNS, DHCP
Backup & Disaster Recovery
Veeam Backup & Replication, Windows Server Backup (WSB), Volume Shadow Copy Service (VSS)
Storage & Networks
Network Attached Storage (NAS), SAN Storage, RAID Configurations, LAN/WAN Routing, Firewalls
Scripting & Monitoring
PowerShell 5.1, Task Scheduler, Event Viewer, SMTP Mailer Protocols
Veeam Enterprise Backup & Offsite Replication Topology
The diagram below illustrates the backup lifecycle: system snapshots are pulled via Veeam agents to a local NAS storage node on a daily schedule. These local backups are replicated to an offsite DR facility weekly via WAN replication, and cold-archived to the cloud for historical preservation.
PowerShell Script: Auditing Windows Server Backup Event Logs
The script below checks the Windows Server Backup logs (Event ID 4 in event channel Microsoft-Windows-Backup) and automatically sends an email alert if a backup fails or warning codes are registered.
# Configure variables
$LogName = "Microsoft-Windows-Backup/Operational"
$EventID = 4 # Event ID for backup completion
$MailSender = "[email protected]"
$MailRecipient = "[email protected]"
$SMTPServer = "smtp.enterprise.internal"
# Retrieve last event within 24 hours
$LastBackupEvent = Get-WinEvent -FilterHashtable @{LogName=$LogName; ID=$EventID; StartTime=(Get-Date).AddDays(-1)} -ErrorAction SilentlyContinue
if ($LastBackupEvent) {
# Check XML event details for success status
[xml]$EventXml = $LastBackupEvent.ToXml()
$ResultCode = $EventXml.Event.UserData.BackupTemplate.HResult
if ($ResultCode -ne "0") {
# Backup completed with errors
$Body = "WARNING: Backup job completed with issues. Error code: $ResultCode. Please review Event Viewer."
Send-MailMessage -From $MailSender -To $MailRecipient -Subject "BACKUP WARNING: Server Backup Errors" -Body $Body -SmtpServer $SMTPServer
}
} else {
# No backup event found in last 24 hours
$Body = "CRITICAL: No backup event found in the event logs for the last 24 hours. The backup job might have hung or failed to start."
Send-MailMessage -From $MailSender -To $MailRecipient -Subject "BACKUP FAILURE: No backup detected" -Body $Body -SmtpServer $SMTPServer
}
Active Directory Security Auditing (PowerShell)
PowerShell cmdlet used to audit inactive users in the domain directory weekly.
Import-Module ActiveDirectory
# Define inactive threshold (e.g., 90 days)
$InactiveDays = 90
$ThresholdDate = (Get-Date).AddDays(-$InactiveDays)
# Retrieve inactive users
$InactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $ThresholdDate -and Enabled -eq $true} -Properties LastLogonDate
# Output list
foreach ($User in $InactiveUsers) {
[PSCustomObject]@{
SamAccountName = $User.SamAccountName
Name = $User.Name
LastLogonDate = $User.LastLogonDate
}
}