Jason,
To answer your question about using -Filter and supplying the class, either way will work fine. Using -Query will allow you to return specific properties, which is important if you are querying a class with a lot of properties when you only need a few.
I don't think you are getting the isolation you believe you are by housing each script separately. I would make the computer name and log location into parameters and pass in that value. That way, if you make a change to the script, you don't have to change X number of files.
param ( $computer = "AAMCMLM1", $logLocation = "I:\Jason Stephens\AAMCMLM1\drive_log.xls" )
Then your master script could be something as simple as
<code>
param($ServerFile = 'C:\servers.txt')
$Servers = Get-Content $ServerFile
foreach ($Server in $Servers)
{
./drive_log.ps1 -computer $server
}
</code>
Also, since you are calling them all from a master script, unless you are kicking off separate processes to run them, you still run into a chance of blocking with a failed WMI query. I would move the WMI query before you even create the COM object for Excel; that way, if your WMI query fails, you don't have to deal with any weirdness from Excel.
If you are launching the scripts via separate processes (to prevent blocking due to a failed WMI query), you will have to watch access to the Excel file (if they are all writing to the same file).
I did not see where you were logging the volume name. Are you?
Did you mean to have the $size/$free? Reversing that will give you a percentage of free space.
Finally, I would also log both the Free Space and Size. Since I grabbed that info, it doesn't hurt to log it and might come in useful.
<ShamelessPlug>Polymon (open source, free, systems monitoring
http://www.codeplex.com/polymon) has disk monitoring built in. </ShamelessPlug>