The WebAdministration module has a Function called IIS:. It essentially acts like a drive letter or an uri protocol. Its really convenient and makes accessing appPool, site information, and ssl bindings easy.
I recently noticed two problems with assigning values through the IIS: protocol or the objects which is works with:
StartMode Can’t Be Set Directly
For some reason, using Set-ItemProperty to set the startMode value directly throws an error. But, if you retrieve the appPool into a variable and set the value using an = operator, everything works fine.
1 2 3 4 5 6 7 8 9 10 |
ipmo webadministration
New-WebAppPool "delete.me"
Set-ItemProperty IIS:\AppPools\delete.me startMode "AlwaysRunning"
$a = Get-Item IIS:\AppPools\delete.me
$a .startMode = "AlwaysRunning"
Set-Item IIS:\AppPools\delete.me $a
|
Here is the error that gets thrown:
1 2 3 4 5 6 |
Set-ItemProperty : AlwaysRunning is not a valid value for Int32.
At C:\Issue-PowershellThrowsErrorOnAppPoolStartMode.ps1:6 char:1
+ Set-ItemProperty IIS:\AppPools\delete.me startMode "AlwaysRunning"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ Set-ItemProperty ], Exception
+ FullyQualifiedErrorId : System.Exception,Microsoft.PowerShell.Commands.SetItemPropertyCommand
|
CPU’s resetLimit Can’t Directly Use New-TimeSpan’s Result
I think the example can show the problem better than I can describe it:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ipmo webadministration
New-WebAppPool "delete.me"
$a = Get-ItemProperty IIS:\AppPools\delete.me cpu
$a .resetInterval = New-TimeSpan -Minutes 4
Set-ItemProperty IIS:\AppPools\delete.me cpu $a
$a = Get-ItemProperty IIS:\AppPools\delete.me cpu
$k = New-TimeSpan -Minutes 4
$a .resetInterval = $k
Set-ItemProperty IIS:\AppPools\delete.me cpu $a
|
Here is the error that gets thrown:
1 2 3 4 5 6 |
Set-ItemProperty : Specified cast is not valid.
At C:\Issue-PowershellThrowsErrorOnCpuLimitReset.ps1:8 char:1
+ Set-ItemProperty IIS:\AppPools\delete.me cpu $a
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ Set-ItemProperty ], InvalidCastException
+ FullyQualifiedErrorId : System.InvalidCastException,Microsoft.PowerShell.Commands.SetItemPropertyCommand
|
The links on each section correspond with bug reports for the issues, so hopefully they will get looked into.