Often times changing Application Pool settings in IIS means having to touch all the Application Pools that are used by a single website. For web farms hosting several websites this can easily get complicated. One way to handle this is to find all the Application Pools within a Website and then update them as needed.
Script Highlights
- Accept the Website Name as a script parameter
- Validate that the Website Name is valid
- Use theĀ Get-WebApplication cmdlet to load all the Applications in the Website
- Store the Application Pool names in an array
- Enumerate through the Application Pools in the array and update properties on each one
Script IIS Application Pool Changes
param ([Parameter(Mandatory=$true)] [String]$Site ) Write-Host "" Write-Host " " -BackgroundColor DarkCyan Write-Host " IIS Script " -BackgroundColor DarkCyan Write-Host " Update Application Pools " -BackgroundColor DarkCyan Write-Host " " -BackgroundColor DarkCyan Write-Host "" Import-Module WebAdministration -ErrorAction SilentlyContinue # Check if the Website Exists if (dir IIS:\Sites\$Site -ErrorAction SilentlyContinue) {Write-Host "Checking $Site Configuration"}else{ Write-host "$Site does not exist, exiting" -ForegroundColor Red -BackgroundColor Black Write-Host "" exit } Write-Host "" # Application Pools $pools = @() # Enumerate All the Applications in that Website foreach ($a in Get-WebApplication -site $Site){ # Add to Array if (!($pools -contains ($a.applicationPool))){ $pools += ($a.applicationPool) } } # Update Each App Pool Write-Host "Updating Application Pool Settings" foreach ($p in $pools){ Write-Host "Updating $p...." Set-ItemProperty iis:\apppools\$p -name processModel -value @{idletimeout="0"} Set-ItemProperty iis:\apppools\$p -Name enable32BitAppOnWin64 -Value $true Write-Host "Set $p to idletimeout=0 and 32-Bit=True" Write-Host "" } Write-Host "Done" Write-Host "" Write-Host " " -BackgroundColor DarkCyan