It's quite common to automate the process for creating a web site and its associated application pools. Creating an app pool is a simple process, but the many different settings that can be used is where things can get complicated. In my experience I found that PowerShell's Set-ItemProperty can get complicated when it's used with IIS app pools, so here's a few things I found out.
The IIS:\ provider doesn't work unless the WebAdministration module is first imported. So the following command must be run at the beginning of any script
Import-Module WebAdministration or ipmo webadministration
To fetch a list of app pools, run
Whenever I'm working with something for the first time, I select one object, then pass it to the Format-List cmdlet which enables me to see every available property.
Get-Item IIS:\AppPools\* | select-object -First 1 | Format-List -Property *
This displays all the properties that were hidden from the results of the first Get-Item command. I could also select a specific app pool
Get-Item IIS:\AppPools\MyAppPool | Format-List -Property *
I can see several results display Microsoft.IIs.PowerShell.Framework.ConfigurationElement rather than an actual value.
|App Pool properties|
This is where we need to switch to the Get-ItemProperty cmdlet to see the property details in full.
Get-Item IIS:\AppPools\* | select-object -First 1 | Get-ItemProperty -name processmodel
or for a specific App Pool
Get-Item IIS:\AppPools\MyAppPool | Get-ItemProperty -name processmodel
this can also be written as
Get-ItemProperty IIS:\AppPools\MyAppPool -name processmodel
The results show that processmodel has several properties.
I expected to be able to change one of these properties by running a command like this
Set-ItemProperty IIS:\AppPools\MyAppPool -name processmodel.identitytype -Value ApplicationPoolIdentity
When I run this command, it executes without an error, but no changes are made.
Similarly with other App Pool settings the Set-ItemProperty command does not make changes.
Set-ItemProperty IIS:\AppPools\MyAppPool -name managedPipeLineMode -value Integrated
After some experimentation I found that the name parameter of Set-ItemProperty is case sensitive
When I go back and examine my previous commands, I can see that processmodel is in fact processModel, and identitytype is identityType. Also I should've been using managedPiplineMode.
Once I change my commands accordingly, the Set-ItemProperty command correctly makes the changes.
Set-ItemProperty IIS:\AppPools\MyAppPool -name processModel.identityType -Value ApplicationPoolIdentity
Set-ItemProperty IIS:\AppPools\MyAppPool -name managedPipelineMode -value Integrated