I want to start and stop application pool in IIS using powershell script. I had try to write the script but i didn't get this.
How to Stop Application Pools Using the IIS Manager. On the Connections pane, expand the server node and click Application Pools to display all Application Pools. On the Application Pools page, select the application pool for the published application that is running. Click Stop to stop the application pool.
Configuring Auto-Start with IIS ManagerIn the Connections pane, select the Application Pools node, revealing the Application Pools pane in the main view. Select the application pool for which you wish to enable Auto-Start. Locate the Start Mode option under the General group and set it to AlwaysRunning. Click OK.
To stop a website that runs on IIS Server, Open a PowerShell console and run the following cmdlet to list all sites that are running or stopped on the server. Note the name of the site you would like to stop. Using the site name, run this command to stop the website without a confirmation prompt.
You can use this
if your use (PowerShell 2.0) import WebAdministration module
import-module WebAdministration
Please check the state of the application pool before. If the application pool is already stopped you get an exception.
Stop application pool:
$applicationPoolName = 'DefaultAppPool'
if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Stopped'){
Write-Output ('Stopping Application Pool: {0}' -f $applicationPoolName)
Stop-WebAppPool -Name $applicationPoolName
}
Start application pool:
if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Started'){
Write-Output ('Starting Application Pool: {0}' -f $applicationPoolName)
Start-WebAppPool -Name $applicationPoolName
}
Permissions: You have to be a member of the "IIS Admins" group.
These days the IISAdminstration module has mostly superceded WebAdministration. So if you're on Windows 10 / Server 2016, you can use Get-IISAppPool:
(Get-IISAppPool "name").Recycle()
You have to import the WebAdministration
module using Import-Module and then you can use Start-WebAppPool and Stop-WebAppPool
I use the following code in an Azure pipeline:
Stop the pool:
Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1';
$AppPoolName = 'DefaultAppPool';
$AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
$WasStarted = $false;
$Timeout = [System.TimeSpan]::FromMinutes(1);
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch';
$StopWatch.Start();
# Possible status: "Starting", "Started", "Stopping", "Stopped" and "Unknown".
while ($AppPoolState -ne 'Stopped') {
if ($AppPoolState -eq 'Started') {
$WasStarted = $true;
Stop-WebAppPool -Name $AppPoolName;
}
Start-Sleep -Seconds 2;
if ($StopWatch.Elapsed -gt $Timeout) {
throw New-Object -TypeName 'System.TimeoutException' -ArgumentList "Timeout of $($Timeout.TotalSeconds) seconds exceeded!";
}
$AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
}
Start the pool:
Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1';
$AppPoolName = 'DefaultAppPool';
$AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
$WasStopped = $false;
$Timeout = [System.TimeSpan]::FromMinutes(1);
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch';
$StopWatch.Start();
# Possible status: "Starting", "Started", "Stopping", "Stopped" and "Unknown".
while ($AppPoolState -ne 'Started') {
if ($AppPoolState -eq 'Stopped') {
$WasStopped = $true;
Start-WebAppPool -Name $AppPoolName;
}
Start-Sleep -Seconds 2;
if ($StopWatch.Elapsed -gt $Timeout) {
throw New-Object -TypeName 'System.TimeoutException' -ArgumentList "Timeout of $($Timeout.TotalSeconds) seconds exceeded!";
}
$AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
}
The variables $WasStarted
and $WasStopped
are extra information not used within this examples but could be used to determine whether an application pool should be restarted after the deployment of a new version is completed or not (because it was already stopped before).
To stop an App Pool using PowerShell use
Stop-WebAppPool -Name YourAppPoolNameHere
And to start the App Pool
Start-WebAppPool -Name YourAppPoolNameHere
You will need the WebAdministration
module installed so check you have it with this command
Get-Module -ListAvailable
You can stop and stop all application pools respectively using the following powershell script. The second line below elevates permissions. You could exclude this and just run as administrator.
Stop all application pools script
Import-Module WebAdministration
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }
$AppPools=Get-ChildItem IIS:\AppPools | Where {$_.State -eq "Started"}
ForEach($AppPool in $AppPools)
{
Stop-WebAppPool -name $AppPool.name
# Write-Output ('Stopping Application Pool: {0}' -f $AppPool.name)
}
Start all application pools script
Import-Module WebAdministration
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }
$AppPools=Get-ChildItem IIS:\AppPools | Where {$_.State -eq "Stopped"}
ForEach($AppPool in $AppPools)
{
Start-WebAppPool -name $AppPool.name
# Write-Output ('Starting Application Pool: {0}' -f $AppPool.name)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With