Copy an app_offline page to the root to tell users that maintenance begins in 5 minutes. Then recycle the worker processes.
https://stackoverflow.com/questions/1153449/asp-net-2-0-how-to-use-app-offline-htm
Powershell script to start with. Adjust as needed.
copy-item C:\YourWebStuff\app_offline.htm -Destination C:\Inetpub\wwwroot\
start-sleep -Seconds (60 * 5) # give users 5 minutes to see the message
(Get-IISAppPool -Name DefaultAppPool).stop() # use your pool name
start-sleep -Seconds 30 # give it some time
get-process w3wp | stop-process -force # kill IIS wp if it won't stop
# do maintenance here
remove-item C:\Inetpub\wwwroot\app_offline.htm # tell IIS to serve up the site
(Get-IISAppPool -Name DefaultAppPool).start() # restart the app pool
If app_offline doesn't work for you, then define 2 sites with the same network bindings. One site is your main app site, the second site is just simple htm pages that show a message that the site is down for maintenance. That second site is stopped by default. When you want to do maintenance, stop the first site and start the second. When maint is complete, stop the second and start the first.