If you, like me, are maintaining lots of websites, you probably want to script as much as you can. It’s time consuming to change a setting for 20+ websites, and it’s also a great chance you miss something in the process.
PowerShell is really neat in these cases, and it gets better for every new release as well.
This is a script i use to do the following:
- Create a new application pool, with the preferred .NET version, identity and a few other settings
- Create a folder to hold the website
- Create the website
- Configure a scheduled task to rotate and archive log files.
This script is highly customized for my needs and my environment. As you can se there’s a lot of assumptions in the script, that you may want to change, but i may be a nice start for you!
# # PowerShell Script used to create new websites. Requires Eleveted PowerShell Console! # This script: # - Creates a new Applicatiopn Pool with our preferred settings # - Creates a new website using that pool # - Create a scheduled job to manage logfiles # # Make sure to edit these parameters before you run the script: # - $AppPoolName Sets the name of AppPool and WebSite # - $AppPoolIdentityName and $AppPoolIdentityPwd to set the identity # - $SiteDirectory is the base path to the folder holding websites # ######################### # Import modules needed # ######################### Import-Module WebAdministration ##################### # Usefull Functions # ##################### #Get the next website-id from IIS. You should override this if you use random ids, or if your sites isn't in order! Function Get-NextSiteId { $MaxId = Get-Website | Measure-Object -Property ID -Maximum return $id.Maximum + 1 } ###################### # Set all parameters # ###################### #AppPool parameters $AppPoolName = "Test.Domain.Com" #Name of ApplicationPool, Should be the same as the name of the website (Eg. Soot.Msb.Se)! $AppPoolDotNetVersion = "v4.0" #.NET version for pool $AppPoolIdentityName = "domain\sysAccount" #Identity to execute pool $AppPoolIdentityPwd = "P@ssw0rd" #Identity password #WebSite parameters $SiteName = $AppPoolName #WebSite name, by default the same as name of pool $SiteDirectory = "C:\WebSite\Sites\" #Base folder, where the site should be created. Site folder is created automatically $SiteId = Get-NextSiteId #Get next free ID, change this manually if needed, eg. if you are using random id. #Scheduled task, LogRotate #Theese values shouldn't be neccesarry to edit. #Make sure LogRotate exists under Program Files and that you WebSite-folder point to the correct location. $TaskName = "LogRotate W3SVC$($SiteId)" $TaskDescription = "Archives old logfiles for site $($SiteName)" $TaskActionCommand = "C:\Program Files\LogRotate\LogRotator.App.exe" $TaskArguments = "C:\WebSite\Logs\W3SVC$($SiteId) C:\WebSite\Logs\Backup W3SVC$($SiteId) *.log 31 true" $TaskPath = "LogRotate" ########################### # Create application pool # ########################### #Create Pool and store it in $AppPool New-WebAppPool –Name $AppPoolName $AppPool = Get-Item IIS:\AppPools\$($AppPoolName) #Stop AppPool $AppPool | Stop-WebAppPool #Set additional properties #Uncomment these three lines to user AppPoolIdentity $AppPool.processModel.identityType = 3 $AppPool.ProcessModel.Username = $AppPoolIdentityName $AppPool.ProcessModel.Password = $AppPoolIdentityPwd $AppPool.ProcessModel.IdleTimeout = "0" $AppPool.ManagedRuntimeVersion = $AppPoolDotNetVersion #Save and start AppPool $AppPool | Set-Item $AppPool | Start-WebAppPool ################## # Create website # ################## #Create Website Directory New-Item -ItemType directory -Path "$($SiteDirectory)$($SiteName)" #Create Website and store it in $WebSite New-Website -Name $SiteName -PhysicalPath "$($SiteDirectory)$($SiteName)" -ApplicationPool $AppPoolName -Port "170$($SiteId)" -HostHeader "localhost" $WebSite = Get-Item IIS:\Sites\$($SiteName) #Start Website $WebSite | Start-WebSite ###################################### # Create scheduled job for LogRotate # # This only works on Win2012 # ###################################### $PsHost = host $OsVer = [environment]::OSVersion.Version If(($OsVer.Major -ge 6) -and ($OsVer.Minor -ge 2) -and ($PsHost.Version.Major -ge 4)) { Import-Module ScheduledTasks $TaskAction = New-ScheduledTaskAction -Execute $TaskActionCommand -Argument $TaskArguments $TaskTrigger = New-ScheduledTaskTrigger -Daily -AT "05:00" $Task = New-ScheduledTask -Action $TaskAction -Trigger $TaskTrigger -Description $TaskDescription Register-ScheduledTask $TaskName -InputObject $Task -TaskPath $TaskPath } Else { "You need a PowerShell 4 and Windows Server 2012 to create Scheduled Task!" "You'll need to configure LogRotate manually." }
Follow jonlin76