Q:

List all stopped application pools in an IIS6 farm

I'd like to print only those IIS6 pools that are stopped or stopping (have an AppPoolState of 3 or 4). If everything else is fine (all started), just print out "OK". I'm not sure for a simple way to check all of them. I've tried to loop through app pools checking each state one by one, but it looks a bit complicated and there seems to be an easier way to do this.
This code will go inside a loop that runs through a huge list of servers running other checks on each then prints out a table.
$iispools = [ADSI]"IIS://$server/W3SVC/AppPools" | foreach {$_.children} | select Name,AppPoolState | where {($_.name -ne "DefaultAppPool")}

if (condition?)
{
    write-host "OK"
}
else {
    # print stopped/stopping pools here
    $iispools | where { $_.apppoolstate -ge 3 } | convertto-html -fragment
}

A:

You can check if there are any items in a collection like this:
$stoppedPools = $iispools | where { $_.apppoolstate -ge 3 }
if (!$stoppedPools)
{
    write-host "OK"
}
else 
{
    # print stopped/stopping pools here
    $stoppedPools | convertto-html -fragment
}

