I haven't really done any Windows scripting at all, so I am at a loss on how to pull this one off. Anyway, basically what we want to do is have a script that will take an argument on which IIS AppPool to recycle. I have done some research on Google and haven't had much success on getting things to work.
Here is what I am trying now:
$appPoolName = $args[0] $appPool = get-wmiobject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPools" Where-Object {$_.Name -eq "W3SVC/APPPOOLS/$appPoolName"} $appPool.Recycle()
and the error I get:
Get-WmiObject : A parameter cannot be found that matches parameter name '$_.Name -eq "W3SVC/APPPOOLS/$appPoolName"'.
Anyway, it would be nice if I also knew how to debug things like this. I already fixed one bug with the original script by doing gwmi -namespace "root\MicrosoftIISv2" -list. Any other tips like that one would be great.
Thanks!
Update: Here is some more info
$appPool = gwmi -namespace "root\MicrosoftIISv2" -class "IISApplicationPools" | Get-Member . TypeName: System.Management.ManagementObject#root\MicrosoftIISv2\IIsApplicationPools Name MemberType Definition ---- ---------- ---------- Caption Property System.String Caption {get;set;} Description Property System.String Description {get;set;} InstallDate Property System.String InstallDate {get;set;} Name Property System.String Name {get;set;} Status Property System.String Status {get;set;} __CLASS Property System.String __CLASS {get;set;} __DERIVATION Property System.String[] __DERIVATION {get;set;} __DYNASTY Property System.String __DYNASTY {get;set;} __GENUS Property System.Int32 __GENUS {get;set;} __NAMESPACE Property System.String __NAMESPACE {get;set;} __PATH Property System.String __PATH {get;set;} __PROPERTY_COUNT Property System.Int32 __PROPERTY_COUNT {get;set;} __RELPATH Property System.String __RELPATH {get;set;} __SERVER Property System.String __SERVER {get;set;} __SUPERCLASS Property System.String __SUPERCLASS {get;set;} ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime(); ConvertToDateTime ScriptMethod System.Object ConvertToDateTime(); Delete ScriptMethod System.Object Delete(); GetType ScriptMethod System.Object GetType(); Put ScriptMethod System.Object Put(); gwmi -namespace "root\MicrosoftIISv2" -class "IISApplicationPools" __GENUS : 2 __CLASS : IIsApplicationPools __SUPERCLASS : CIM_LogicalElement __DYNASTY : CIM_ManagedSystemElement __RELPATH : IIsApplicationPools.Name="W3SVC/AppPools" __PROPERTY_COUNT : 5 __DERIVATION : {CIM_LogicalElement, CIM_ManagedSystemElement} __SERVER : IRON __NAMESPACE : root\MicrosoftIISv2 __PATH : \\IRON\root\MicrosoftIISv2:IIsApplicationPools.Name="W3SVC/A ppPools" Caption : Description : InstallDate : Name : W3SVC/AppPools Status :
What is application pool recycling in IIS? Recycling means that the worker process that handles requests for that application pool is terminated and a new one is started. This is generally done to avoid unstable states that can lead to application crashes, hangs, or memory leaks.
Where-Object is a filter that expects something as in input. There seems to be a missing pipe, before the where filter.
Try:
$appPoolName = $args[0] $appPool = get-wmiobject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" | Where-Object {$_.Name -eq "W3SVC/APPPOOLS/$appPoolName"} $appPool.Recycle()
Edit: I noticed that the WMI class was IISApplicationPools, which as you saw, did not show us the Recycle method when piped to Get-Member. This needs to be changed to IISApplicationPool (non-plural). With that change, you are able to use the Recycle method. The code above has been updated.
Using the data from this question I was able to create 2 very useful functions.
The code:
function Get-IisAppPools { Get-WmiObject -Namespace "root\MicrosoftIISv2" -Class "IIsApplicationPool" -Filter 'name like "W3SVC/APPPOOLS/%"' | ForEach-Object { $_.Name.ToString().SubString(15) } } function Recycle-IisAppPool([string]$appPoolName) { Invoke-WmiMethod -Name Recycle -Namespace "root\MicrosoftIISv2" -Path "IIsApplicationPool.Name='W3SVC/APPPOOLS/$appPoolName'" }
You can use these functions like this
Recycle-IisAppPool DefaultAppPool Get-IisAppPools | ? { $_ -match "v4.0$" } | % { Recycle-IisAppPool $_ }
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