Why Automate Reports?

Save hours every week by automating routine reports. This tutorial shows you how to schedule PowerShell scripts to run daily and email results.

Step 1: Create Your Report Script

Save this as DailyReport.ps1:

# Get system information
$ComputerInfo = Get-ComputerInfo | Select-Object CsName, OsName, OsVersion
$DiskInfo = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Used -gt 0}

# Generate HTML report
$Report = @"
<h1>Daily Server Report</h1>
<h2>Computer: $($ComputerInfo.CsName)</h2>
<p>OS: $($ComputerInfo.OsName) - $($ComputerInfo.OsVersion)</p>
<h2>Disk Usage</h2>
"@

foreach ($Disk in $DiskInfo) {
    $Report += "<p>Drive $($Disk.Name): $([math]::Round($Disk.Used/1GB, 2)) GB used</p>"
}

# Email the report
Send-MailMessage -From "reports@company.com" -To "admin@company.com" -Subject "Daily Report" -Body $Report -BodyAsHtml -SmtpServer "smtp.office365.com" -Credential $Cred

Step 2: Create Scheduled Task

  1. Open Task Scheduler
  2. Click "Create Task"
  3. Name: "Daily PowerShell Report"
  4. Trigger: Daily at 8:00 AM
  5. Action: Start a program ? powershell.exe
  6. Arguments: -ExecutionPolicy Bypass -File "C:\Scripts\DailyReport.ps1"

Pro Tip: Store Credentials Securely

Never hardcode passwords. Use Windows Credential Manager or export credentials:

$Cred = Get-Credential
$Cred | Export-Clixml -Path "C:\SecureCreds.xml"