Servers  

Automating IIS Maintenance A Step-by-Step Guide to 5-Hour Restarts

In high-traffic or legacy web environments, IIS (Internet Information Services) servers can occasionally suffer from memory leaks or hung worker processes. Automating a periodic refresh ensures the server remains responsive without manual intervention. This article provides a complete guide to creating a PowerShell maintenance script and scheduling it using Windows Task Scheduler.

Phase 1: Creating the PowerShell Script

The goal of the script is to refresh Application Pools and restart core services without requiring user interaction.

  1. Create the Directory: Create a folder named C:\IISScripts\ to store your automation files.

  2. The Script: Create a file named Restart-IIS.ps1 with the following content:

PowerShell

# Import the IIS Module
Import-Module WebAdministration

# 1. Recycle all Application Pools
# This clears memory for individual apps without stopping the whole server
Get-ChildItem IIS:\AppPools | ForEach-Object { Restart-WebAppPool -Name $_.Name }

# 2. Perform a full IIS Reset
# Restarts the W3SVC and other core services
iisreset /restart /timeout:20

# 3. Ensure all sites are started
# Restarts any sites that may have been manually stopped
Get-Website | Where-Object { $_.State -ne "Started" } | Start-Website

Note on Permissions: When testing this script manually in PowerShell ISE, you must right-click the program and select Run as Administrator. Failure to do so will result in "Access Denied" errors, even if your account has admin rights.

Phase 2: Configuring Task Scheduler

To run this every 5 hours automatically, use the Windows Task Scheduler with specific security settings to prevent "Logon Session" errors.

1. General Settings

  • Name: IIS 5-Hour Refresh.

  • Security Options: Click Change User or Group and set it to SYSTEM.

  • Privileges: Check Run with highest privileges.

  • Logon Options: Select Run whether user is logged on or not.

2. Triggers

  • Set the trigger to One time.

  • Under Advanced Settings, check Repeat task every: 5 hours.

  • Set duration to Indefinitely.

3. Actions

  • Action: Start a program.

  • Program/script: powershell.exe.

  • Add arguments: -ExecutionPolicy Bypass -File "C:\IISScripts\Restart-IIS.ps1".

Phase 3: Verification and Troubleshooting

Once configured, you should confirm the automation is working correctly:

  • Task Success: In the Task Scheduler Library, the Last Run Result should show 0x0.

  • System Logs: Open Event Viewer and navigate to Windows Logs > System. Look for a log entry with the source IIS-IISReset.

  • Common Error: If you see "A specified logon session does not exist," ensure the task is running under the SYSTEM account rather than a specific user account.

By following these steps, your IIS server will automatically refresh its resources every 5 hours, ensuring high availability and system stability.